Prolog初学者

时间:2009-12-03 18:18:54

标签: 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.

然而,这会对基本情况以外的任何内容产生错误结果。

2 个答案:

答案 0 :(得分:6)

您的代码不起作用,因为xtailytail是用小写字母书写的,因此不是变量。这有效:

rmlast([], [_]).
rmlast([X|T1], [X|T2]) :- rmlast(T1, T2).

除此之外

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

  2. 你写道:

    rmlast([], [_]). :- true.
    

    这与:

    相同
    rmlast([], [_]).
    :- true.
    

    正如您所看到的那样,第二个语句不会增加任何内容,因此可以安全地删除。

答案 1 :(得分:1)

rmlast([H],[]).
rmlast([H1|Tail1],[H2|Tail2]):-
           H1 = H2,rmlast(Tail1,Tail2).

不要使用'is',它不是一个逻辑运算符。它是一个赋值运算符。请改用“=”。