Prolog初学者

meu*_*erd 2 prolog

我试图制作谓词,对于列表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)

但是,这会对除基本情况之外的任何内容产生错误结果.

Ste*_*202 6

您的代码不起作用,因为xtail并且ytail使用小写字母编写,因此不是变量.这有效:

rmlast([], [_]).
rmlast([X|T1], [X|T2]) :- rmlast(T1, T2).
Run Code Online (Sandbox Code Playgroud)

除此之外:

  1. 如您所见,不需要变量X,Y在这种情况下:只需X在适当的位置使用两次.

  2. 你写:

    rmlast([], [_]). :- true.
    
    Run Code Online (Sandbox Code Playgroud)

    这与:

    rmlast([], [_]).
    :- true.
    
    Run Code Online (Sandbox Code Playgroud)

    如您所见,第二个语句不会增加任何内容,因此可以安全地删除.