次の Prolog プログラムを考えてみましょう (「The Art of Prolog」より):
natural_number(0).
natural_number(s(X)) :- natural_number(X).
plus(X, 0, X) :- natural_number(X).
plus(X, s(Y), s(Z)) :- plus(X, Y, Z).
そしてクエリ:
?- plus(s(s(s(0))), s(0), Z).
SICStus と SWI の両方が期待されるZ = s(s(s(s(0))))
回答を生成しますが、ユーザーに次の回答 (正解no
/false
回答) を問い合わせます。ただし、唯一のゴールが見つかった後、なぜ SLD ツリーに開いたブランチがあるのか 理解できません。SICStus と SWI の両方でデバッグを試みましたが、まだ結果を解釈することができません。私が理解できる限り、どちらもplus(s(s(s(0))), 0, _Z2)
. 誰かがこの動作を理解するのを手伝ってくれますか?