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番目のケースでは一種のショートカットですか?
これは (ある程度) 標準的な動作ですか?つまり、プロローグ ルールを記述するときに考慮する必要がありますか?それとも純粋に実装固有ですか?