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>