我有一个如此的作业问题:
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).
答案 0 :(得分:2)
最明显的问题:(is)/2
仅适用于数字。 (link)
-Number是+ Expr 如果Number是Expr评估的值
,则为True
您想要使用统一运算符(=)/2
(link):
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).