可能であれば、誰かにこの手順を説明してもらいたいです (「learn prolog now」という本から)。2 つの数字を取り、それらを加算します。
add(0,Y,Y).
add(s(X),Y,s(Z)) :- add(X,Y,Z).
原則として理解していますが、いくつか問題があります。クエリを発行するとしましょう
?- add(s(s(0)), s(0), R).
結果は次のとおりです。
R = s(s(s(0))).
ステップ 1 はルール 2 との一致です。ここで、X は s(0) になり、Y は s(0) のままです。ただし、Z (本によると) は s(_G648)、またはその中にインスタンス化されていない変数を持つ s() になります。どうしてこれなの?
最後のステップで、最初のルールが一致し、再帰が終了します。ここで、Y の内容は、どういうわけか、Z のインスタンス化されていない部分になってしまいます! 非常に紛らわしいので、わかりやすい英語の説明が必要です。