0

プロローグで「友達の友達は私の友達」というルールを定義しようとしていますが、次のコードがあります。

friends(john,jake).
friends(mike,hans).
friends(hans,robert).
friends(robert,angela).

mutual_friendship(X,Y):-
    friends(X,Y); 
    friends(Y,X).

friendship(X,Y):- 
    mutual_friendship(X,Y),!;
    mutual_friendship(Y,Z), friendship(Z,X).

そして、それは非常にうまく機能し、ハンスとロバートを介してマイクとアンジェラの友情を検出することができます。問題は、たとえばジョンとアンジェラの間の友情を見つけようとするときです。無限ループ。

4

1 に答える 1

2

mutual_friendship/2ここでは少し関係がないと思います。

friendship(X,Y):-
    ( friends(X,Y)
    ; friends(X,Z), friendship(Z,Y)
    ).

そして与えられた事実に対して

friends(john,jake).
friends(mike,hans).
friends(hans,robert).
friends(robert,angela).

私たちは得ることができました

?- friendship(john,angela).
false.

?- friendship(mike,angela).
true .
于 2013-05-12T16:13:25.163 に答える