このバージョンの Ackermann の関数を見つけて、MIT Scheme Lisp でコーディングしようとしましたが、成功しませんでした。
アッカーマン関数 A(m,n)
m=0のとき
A(m,n)=n+1
m>0かつn=0の場合
A(m,n)=A(m-1,1)
m>0かつn>0の場合
A(m,n)=A(m-1,A(m,n-1))
(ここにあります http://www.gfredericks.com/sandbox/arith/ackermann)
私のスキームコード:
(define (acker2 m n)
(cond ((= m 0)
(+ n 1))
((and (> m 0)
(= n 0))
(acker2 (- m 1)
1))
((and (> m 0)
(> n 0))
(acker2 (- m 1)
(acker2 (m
(- n 1)))))))
今いくつかの結果:
(acker2 0 0) 値: 1
(acker2 0 1) 値: 2
(acker2 0 2) 値: 3
(acker2 2 2) オブジェクト 2 は適用されません
(acker2 1 23) オブジェクト 1 は適用されません
(acker2 8 0) オブジェクト 7 は適用されません
解決策は何ですか?