2013-04-07 67 views
0

我有這樣一個問題,分配這麼:如何在Prolog中設置arg的值?

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

請考慮的問題解釋什麼** **和** **如何 「它不工作......」 – Haile 2013-04-07 17:40:57

+0

地道:'最後(X,[X]): - !。' – CapelliC 2013-04-07 19:18:26

回答

2

最明顯的問題:(is)/2作品,只有編號。 (link

- 數量爲+ Expr的 真當號是您想要使用的統一操作(=)/2link)到expr的

值:

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. 
+0

謝謝。只是FYI,看起來不需要削減(!),並且還有'last(X,[X])。'也適用。 – 2013-04-07 18:11:48

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