1

私はPrologでいくつかの宿題に取り組んでおり、次のようなものを使用する必要があります:

ルール:

brothers(a,b)
brothers(c,d)

データベースに重複を持たずにクエリを実行brothers(b,a)して真になる機能を実装する必要があります。

: を使用することを考えましbrothers(X,Y):- brothers(Y,X)たが、無限に再帰的になります。両方の名前が同じでなければならないので、他に何ができるかわかりません。

4

1 に答える 1

3

さて、無限再帰を破る必要があります! これは、さまざまな方法で実行できます。

1) 注文
データベースを各brother(X,Y)ルールに作成しますX>Y。次に、ルールを追加しますbrother(X,Y):- Y>X, brother(Y,X).

2) ラッパー述語
brother(X,Y):- brother_facts(X,Y) ; brother_facts(Y,X).

3) テーブル作成
XSB (またはそれをサポートする他のプロローグ実装) を使用する場合に可能です。テーブル化はメモ化に少し似ており、ループを壊します

于 2012-11-05T09:21:19.407 に答える