2016/01/19

継続を使ってフィボナッチ数列を求める

call/ccの使い方はよくわかってないので自分で継続を渡します.

(define (fib n)
  (fib/cc n (lambda (a b) (+ a b))))

(define (fib/cc n func)
  (cond ((= n 0) (func 0 0))
        ((= n 1) (func 0 1))
        (else
         (func (fib/cc (- n 1) func) (fib/cc (- n 2) func)))))

テスト.

gosh> (map fib (iota 20 0))
(0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181)

© 2022 wat-aro