次の数値表現を返す Prolog 再帰を作成しようとしています。
1 --> s(0)
2 --> s(s(0))
3 --> s(s(s(0))) ...
次のコードを使用しました。
retnum(s(0),1). %Stop Condition
retnum(S,Z):-
retnum(s(S),Z1),
Z is Z1+1.
しかし、予測を実行しようとすると:
retnum(A,2).
結果 A=0 が得られ、続行するとスタック制限を超えたというエラーが発生します。結果 A = s(s(0)) が得られることを期待していました。また、追加の停止条件を追加しようとしました: retnum(0,0)。
私の間違いはどこにあり、それを行うためのより良い方法があるかどうかはわかりませんか?