我试图制作谓词,对于列表X和Y,如果X和Y是相同的列表,则rmlast为真,除了Y有1个元素的事实.所以[1] [1,2]或[3,2] [3,2,5].
rmlast([], [_]). :- true.
rmlast([X|xtail], [Y|ytail]) :- rmlast(xtail,ytail), X is Y.
Run Code Online (Sandbox Code Playgroud)
但是,这会对除基本情况之外的任何内容产生错误结果.
您的代码不起作用,因为xtail并且ytail使用小写字母编写,因此不是变量.这有效:
rmlast([], [_]).
rmlast([X|T1], [X|T2]) :- rmlast(T1, T2).
Run Code Online (Sandbox Code Playgroud)
除此之外:
如您所见,不需要变量X,Y在这种情况下:只需X在适当的位置使用两次.
你写:
rmlast([], [_]). :- true.
Run Code Online (Sandbox Code Playgroud)
这与:
rmlast([], [_]).
:- true.
Run Code Online (Sandbox Code Playgroud)
如您所见,第二个语句不会增加任何内容,因此可以安全地删除.