如何在Prolog中设置arg的值?

时间:2013-04-07 16:56:07

标签: prolog

我有一个如此的作业问题:

Write a program to find the last element of a list. e.g.
?- last(X, [how, are, you]).
X = you
Yes

我目前正在寻找最后一个这样的元素:

last([Y]) :-
    write('Last element ==> '),write(Y).
last([Y|Tail]):-
    last(Tail).

它有效。我的问题是,如何更改它以接受并设置添加X参数并正确设置?

我尝试了这个,但它不起作用......

last(X, [Y]) :-
    X is Y.

last(X, [Y|Tail]):-
    last(X, Tail).

2 个答案:

答案 0 :(得分:2)

最明显的问题:(is)/2仅适用于数字。 (link

  

-Number是+ Expr       如果Number是Expr评估的值

,则为True

您想要使用统一运算符(=)/2link):

last(X, [Y]) :-
    X = Y,
    !.

last(X, [_|Tail]):-
    last(X, Tail).

让我们试试:

?- last(X, [1, 2, 3]).
X = 3.

?- last(X, [a, b, c]).
X = c.

答案 1 :(得分:2)

在这种情况下,使用统一运算符不是统一的首选方法。您可以以更强大的方式使用统一。请参阅以下代码:

last(Y, [Y]).  %this uses pattern matching to Unify the last part of a list with the "place holder"
               %writing this way is far more concise.
               %the underscore represents the "anonymous" element, but basically means "Don't care"

last(X, [_|Tail]):-
last(X, Tail).