私は今プロローグを学ぼうとしていて、再帰のトピックを始めました。後継者のためにこの例に出くわしました。
numeral(0).
numeral(succ(X)) :- numeral(X)
理論的にはどのように機能するかを理解しています。数値 X を取り、 succ はそれをインクリメントします。ここでの私の質問は、 succ は組み込みの述語ですか? または、この例では何か他のことが起こっていますか? Learnprolognow.org からの例
そんな時、このエクササイズに出会いました
pterm(null).
pterm(f0(X)) :- pterm(X).
pterm(f1(X)) :- pterm(X).
バイナリを表すことを意味します。つまり、0 は f0(null)、1 は f1(null)、2(10) は f0(f1(null))、3(11) は f1(f1(null)) などです。この質問では、pterms を使用して、P2 が P1 の後継者になるように述語 (P1, P2) を定義するように求められます。誰かが私のためにこの質問をより詳細に説明できますか? 私が今見ているように、最後に到達するまで P1 をトラバースして戻ってから、それを P2 と比較する必要がありますが、構文については正確にはわかりません。どんなヒントも役に立ちます