0

ナレッジベースを作成しようとしています。私の問題はterminal/1connected/2次のルールを定義しました。

connected(X,Y) :- connected(Y,X).

私が今理解している理由(私は思う)のために、これは無限の再帰に入りました。

それから、私はSOを検索してみて、この質問を見つけました:Prologで「可換性」を表現するための代替案? 。提供された回答に基づいて、上記の事実を次のように変更しようとしました。

connected(X, Y) :- is_connected(Y, X) /\ is_connected(X, Y).
is_connected(X, Y) :- terminal(X) /\ terminal(Y) /\ connected(X , Y).

しかし、これは私が望んでいた結果を私に与えません。ルールを定義する場合、質問をconnected(t1,t7)すると取得したいと思っています。yesconnected(t7,t1)

4

1 に答える 1

0

私はこれを理解することができました。

私はこれを変更しました:

connected(X, Y) :- is_connected(Y, X) /\ is_connected(X, Y).
is_connected(X, Y) :- terminal(X) /\ terminal(Y) /\ connected(X , Y).

に:

is_connected(X, Y) :- connected(Y, X); connected(X, Y).

結局のところ、私も正しい質問をする必要があります。尋ねる代わりにconnected(X,Y)、私は今尋ねis_connected(X,Y)ます。

于 2013-03-10T23:51:29.947 に答える