【发布时间】:2015-10-02 23:41:44
【问题描述】:
我正在尝试编写一个谓词以从列表列表中的每个列表中删除头部并将尾部添加到新列表中。结果列表应作为第二个参数返回。
这是尝试:
construct_new(S,New) :-
New = [],
new_situation(S,New).
new_situation([],_).
new_situation([H|T], New) :-
chop(H, H1),
new_situation(T, [H1|New]).
chop([_|T], T).
你可以这样称呼它:
construct_new([[x,x],[b,c],[d,e,f]],S).
然而,这只会产生输出true.。
【问题讨论】:
-
考虑列表之间的关系。以子句
new_situation([], _).为例,这不可能是正确的:您真的希望它为 any 第二个参数保留,例如当前成功的?- new_situation([], prolog).?由于您正在描述关系,理想情况下可以在各个方向使用,因此请避免使用“chop”之类的命令性名称。使用更多的声明性名称,如list_without_head/2,以有意义的关系方式描述这两个参数。 -
忍不住想谓词应该叫
queen_of_hearts/2... -
@PauloMoura 太棒了 (+1) :)