私は「LearnPrologNow!」に続く Prolog の初心者です。チュートリアルのセット。概念と語彙を把握するために最善を尽くしています。この問題が提示されたとき、再帰的定義に関する第3章までのすべてを理解できました。
numeral(0).
numeral(succ(X)) :- numeral(X).
与えられたクエリ
numeral(X).
これで、プログラムの考え方は、Prolog がこのシステムで次のような順序で数を数え始めるということであることがわかりました。
X=0
X=succ(0)
X=succ(succ(0))
しかし、毎回「縮小」して上昇する原因がわかりません。プログラムが X のクエリを統合しようとしているという点で、統合の原則は理解していますが、再帰規則を 1 回だけ実行してからゼロを返す必要がありますか? クエリの周りに succ()を追加できるのは何ですか? それは逆方向に再帰規則をトラバースしていませんか?