3.57
delay を macro で定義しようとしたらなぜか fibs が unknown symbol になってしまった。
悩みすぎてもしょうがないので add-stream を改変して済ませてみる。
http://gist.github.com/190724
http://gist.github.com/190725
表示用にこんな手続きを使いました。
gosh> (define *counter* 0) gosh> (define (print-fibs i n) (if (< i n) (begin (display (format "~a ~a ~a\n" i (stream-ref fibs i) *counter*)) (print-fibs (+ i 1) n)))) gosh> (print-fibs 0 20) ;;; こっちが指数関数的に爆発バージョン 0 0 0 1 1 0 2 1 1 3 2 4 4 3 11 5 5 25 6 8 51 7 13 97 8 21 176 9 34 309 10 55 530 11 89 894 12 144 1490 13 233 2462 14 377 4043 15 610 6610 16 987 10773 17 1597 17519 18 2584 28445 19 4181 46135 #<undef> gosh> (print-fibs 0 20) ;;; メモ化 0 0 0 1 1 0 2 1 1 3 2 2 4 3 3 5 5 4 6 8 5 7 13 6 8 21 7 9 34 8 10 55 9 11 89 10 12 144 11 13 233 12 14 377 13 15 610 14 16 987 15 17 1597 16 18 2584 17 19 4181 18 #<undef>