2009/05/20

[scheme]Ackermann(アッカーマン関数)

WS0801 

 

コード

(define inc
  (lambda (n)
    (+ n 1)))

 

(define dec
  (lambda (n)
    (- n 1)))

 

(define Ackermann
  (lambda (n m)
    (cond
     ((zero? n)(inc m))
     ((zero? m)
      (Ackermann (dec n) 1))
     (else
      (Ackermann (dec n)
                 (Ackermann n (dec m)))))))

gosh> (Ackermann 1 0)
2
gosh> (Ackermann 1 1)
3
gosh> (Ackermann 2 2)
7
gosh> (Ackermann 1 2)
4
gosh> (Ackermann 0 (Ackermann 1 1))
4
gosh> (Ackermann 0 3)
4
gosh>

参考

 

The Little Schemer

The Little Schemer

posted with amazlet at 09.03.30

Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 16078

おすすめ度の平均: 5.0

5 小さなScheme処理系で学ぶ数学基礎理論
5 Schemeが好きになります
5 英語であるのが苦痛にならない楽しさ
5 面白いスタイル

Amazon.co.jp で詳細を見る

0 件のコメント:

コメントを投稿