3

SWI-Prolog、バージョン 6.6.6。

次の事実を考慮してください。

p(a, a).
p(a, b).

その結果、次の答えが得られます。

?- p(a, a).
true ;
false.

しかし、データを少し変更すると:

p(a, a).
p(b, a).

少し違う答えが返ってくる…

?- p(a, a).
true.

質問の述語の最初のパラメーターが他の節と統一されていないため、2 番目のケースのバックトラックは発生しないようです。
それにもかかわらず、各ケースの答えが得られることが期待されますtrue ; false.。エンジンは最初の述語句を試行し (結果はtrue)、次にバックトラックして同じ述語の他の句を探します (結果はfalse)。2番目のケースでは一種のショートカットですか?

これは (ある程度) 標準的な動作ですか?つまり、プロローグ ルールを記述するときに考慮する必要がありますか?それとも純粋に実装固有ですか?

4

1 に答える 1