0

次の数値表現を返す 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)。

私の間違いはどこにあり、それを行うためのより良い方法があるかどうかはわかりませんか?

4

2 に答える 2