2

これが私の簡単なPrologプログラムです:

friend(X,Y):-
   knows(X,Y).
friend(X,Z):-
   friend(X,Y),
   friend(Y,Z).

knows(brian,tom).
knows(tom,peter).

次のクエリを入力すると

friend(brian,peter).

Prolog は次の出力を提供します。

?- friend(brian,peter).
true 

さらにセミコロンを入力すると、Prolog は次のように言います。

ERROR: Out of local stack

ここで何が間違っていますか?

4

2 に答える 2

5

エラーは 2 番目の句にあります。代わりに次のようにする必要があります。

friend(X,Z):-
   knows(X,Y),
   friend(Y,Z).

そうしないと、Prolog にさらに解決策を求めると、最初に中間関係friend/2を確立することなく、述語が再帰的に自分自身を呼び出すことになります。述語knows/2への呼び出しをトレースすることで、プログラムのバグについて詳しく知ることができます。friend/2試す:

?- trace, friend(brian,peter).
于 2014-02-13T17:15:16.743 に答える