2012-01-24 1 views
1

次の規則を持つプログラムで: 隣人(X、Y): - リンク(X、Y);リンク(Y、X)。近隣のすべての町のリストを返すPROLOG

フォームのリンク(a、b)は、など私はXにすべての隣接町のリストLを返す手続きall_neighbours(L、X)を書くにはどうすればよい

で述べたいくつかの事実が既にあります?

私の試み:

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

関連する問題