2012-01-24 18 views
1

在具有以下規則的程序中: neighbor(X,Y): - link(X,Y);鏈接(Y,X)。所有鄰近城鎮的返回列表PROLOG

已經有形式鏈接的陳述一些事實(A,B)等

我怎樣寫一個程序all_neighbours(L,X)返回所有相鄰城鎮X的列表L ?

我嘗試:

all_neighbours([Y|Tail],X):- neighbour(X,Y), fail. 

回答

1

您的嘗試並不成功,因爲你總是在第一,實在不行,從來沒有達到在數據庫中剩餘的事實。

最簡單的方法是使用內置findall/3謂:

all_neighbours(L, X) :- findall(Y, neighbour(X, Y), L). 
+0

我不能修復的錯字,但規則實際上應該是all_neighbours(L,X)** - **的findall(Y ,鄰居(X,Y),L)。 – CapelliC

+0

謝謝@chac。我修正了錯字。 – pad