0

我有一个这样的作业问题:

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).
4

2 回答 2

1

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

- 当 Number 是 Expr 计算的值时,Number 为 +Expr True

您想使用统一运算符(=)/2链接):

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.
于 2013-04-07T17:28:59.983 回答
1

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

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).
于 2013-04-08T01:30:53.663 回答