2016-02-28 145 views
1

剛想Prolog的一個小問題。說,我已經使用了內置的謂詞findall/3獲得列表,並使用變量X作爲我的輸出。Prolog的結合謂詞

我不知道我怎麼會那麼另一個謂詞使用這個列表,如last/2找到此列表的最後一個元素。如果你可以包含一個很小的例子,這將有很大的幫助。

+0

你應該告訴你已經嘗試過的東西。 –

+0

爲什麼不'listbuilder(List),last(List,Y)'? –

+0

所以我只需要定義一個謂詞? – ZazzyCola

回答

1

首先,因爲Prolog的目標是成爲一個邏輯編程編程語言,有NU這樣的事情輸出變量。

不過,說你知道變量X一定謂語之後界,你打算調用一個新的謂詞時使用這個值,你可以使用的Prolog的邏輯「和」,/2。我引號之間把「」因爲這從自然語言如何「和」表現自然的理解有時是不同的。

可以這樣使用謂詞:

findall(A,foo(A),X),last(X,L). 

要首先找到的foo/1所有出現,提取變量A,把這些成一個列表X最後得到的Xlast/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. 
+0

非常感謝您的解釋 – ZazzyCola