ここでいろいろ議論されてる、call/ccを使ったジェネレータを勉強がてらに限定継続で書き直してみる。トリッキーな部分がなくなって、かなり素直に書ける。 (define (make-generator f) (let ((cont #f)) (lambda () (reset (if cont (cont #f) (f (lambda (v) (shift k (set! cont k) v)))))))) (define (fib-generator) (make-generator (lambda (yield) (let loop ((a 1) (b 1)) (yield a) (loop b (+ a b)))))) 動作は以下のとおり。 > (define fib (fib-generator)) > (list (fib) (fib) (fib) (fib) (fib)) (1