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.
在具有以下規則的程序中: 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.
您的嘗試並不成功,因爲你總是在第一,實在不行,從來沒有達到在數據庫中剩餘的事實。
最簡單的方法是使用內置findall/3
謂:
all_neighbours(L, X) :- findall(Y, neighbour(X, Y), L).
我不能修復的錯字,但規則實際上應該是all_neighbours(L,X)** - **的findall(Y ,鄰居(X,Y),L)。 – CapelliC
謝謝@chac。我修正了錯字。 – pad