剛想Prolog的一個小問題。說,我已經使用了內置的謂詞findall/3
獲得列表,並使用變量X
作爲我的輸出。Prolog的結合謂詞
我不知道我怎麼會那麼另一個謂詞使用這個列表,如last/2
找到此列表的最後一個元素。如果你可以包含一個很小的例子,這將有很大的幫助。
剛想Prolog的一個小問題。說,我已經使用了內置的謂詞findall/3
獲得列表,並使用變量X
作爲我的輸出。Prolog的結合謂詞
我不知道我怎麼會那麼另一個謂詞使用這個列表,如last/2
找到此列表的最後一個元素。如果你可以包含一個很小的例子,這將有很大的幫助。
首先,因爲Prolog的目標是成爲一個邏輯編程編程語言,有NU這樣的事情輸出變量。
不過,說你知道變量X
是一定謂語之後界,你打算調用一個新的謂詞時使用這個值,你可以使用的Prolog的邏輯「和」,/2
。我引號之間把「和」因爲這和從自然語言如何「和」表現自然的理解有時是不同的。
可以這樣使用謂詞:
findall(A,foo(A),X),last(X,L).
要首先找到的foo/1
所有出現,提取變量A
,把這些成一個列表X
最後得到的X
的last/2
元素。
然後可以例如在定義的謂詞使用:
last_foo(L) :-
findall(A,foo(A),X),
last(X,L).
如果您運行此例如用:
foo(a).
foo(9).
foo(b).
的結果是:
?- foo(A).
A = a ;
A = 9 ;
A = b.
和:
?- findall(A,foo(A),X).
X = [a, 9, b].
現在的結果,以獲得最後是:
?- findall(A,foo(A),X),last(X,L).
X = [a, 9, b],
L = b.
或:
?- last_foo(L).
L = b.
非常感謝您的解釋 – ZazzyCola
你應該告訴你已經嘗試過的東西。 –
爲什麼不'listbuilder(List),last(List,Y)'? –
所以我只需要定義一個謂詞? – ZazzyCola