SICP 読み (134) 3.5.2 無限ストリーム
相変わらず頭痛が酷い。このストレスフルな環境は何とかならんのか。
問題 3.57
ボケる可能性が高いですが構わず書きます。どうやって確認すれば良いんだろうか。とりあえず n 番目の Fibonacci 数を計算する時に add-streams は n - 2 回呼び出される、と思う。あと、memo-proc なソレを使わない場合、どうなるか、というと
回数 0 0 1 2 4 7 12 20 33 54 fibs 0 1 1 2 3 5 8 13 21 34
みたいなカンジになる、と見てるんですがダウト??
途中で Fibonacci なソレを追い越してるんで指数的に大きくなってる、という事で。
ってか、これが本当なのか、というナニを確認するにはどうすれば、という部分は別途検討してみたいと思います。現実トウヒには抜群に良さげ (を
問題 3.58
(expand 1 7 10) は以下と予想。
(1 4 2 8 5 7 1 4 2 8 5 7 ...)
(expand 3 8 10) は以下。
(3 7 5 0 0 0 ...)
アマいか。とりあえずこれは試験で確認するのは簡単だな。試験を以下に。
#!/usr/bin/env gosh (use test.unit) (require "3.5.1") (define-test-suite "3.5.1" ("3.58" ("(expand 1 7 10)" (let ((s (expand 1 7 10))) (assert-equal 1 (stream-ref s 0)) (assert-equal 4 (stream-ref s 1)) (assert-equal 2 (stream-ref s 2)) (assert-equal 8 (stream-ref s 3)) (assert-equal 5 (stream-ref s 4)) (assert-equal 7 (stream-ref s 5)) (assert-equal 1 (stream-ref s 6)) (assert-equal 4 (stream-ref s 7)) ) ) ("(expand 3 8 10)" (let ((s (expand 3 8 10))) (assert-equal 3 (stream-ref s 0)) (assert-equal 7 (stream-ref s 1)) (assert-equal 5 (stream-ref s 2)) (assert-equal 0 (stream-ref s 3)) (assert-equal 0 (stream-ref s 4)) ) ) ) )
以降の問題は算数なソレがナニでハードルがわし的に高いです。