我正在尝试使谓词对于列表X和Y,如果X和Y是相同的列表,则rmlast为真,除了Y有多一个元素的事实。所以是1或3,2。
rmlast([], [_]). :- true.
rmlast([X|xtail], [Y|ytail]) :- rmlast(xtail,ytail), X is Y.但是,对于除基本情况之外的任何情况,这都会产生错误的结果。
发布于 2009-12-04 02:23:08
您的代码无法工作,因为xtail和ytail是用小写字母编写的,因此不是变量。这是可行的:
rmlast([], [_]).
rmlast([X|T1], [X|T2]) :- rmlast(T1, T2).以外
如您所见,在这种情况下,不需要使用变量X和Y:只需在适当的位置使用X两次。
rmlast([],_)。:-真的。
这与以下内容相同:
rmlast([],_)。:-真的。
如您所见,第二条语句没有添加任何内容,因此可以安全地删除。
发布于 2016-04-09 07:35:45
rmlast([H],[]).
rmlast([H1|Tail1],[H2|Tail2]):-
H1 = H2,rmlast(Tail1,Tail2).不要使用“is”,它不是逻辑运算符。它是一个赋值运算符。请改用'=‘。
https://stackoverflow.com/questions/1841835
复制相似问题