SICP 読み (187) 4.2.2 遅延評価の解釈系

問題 4.29 のつづき

試験なソレで確認してみるに、類推は正しかった模様。良かった。で、_Exhibit a program that you would expect to run much more slowly without memoization than with memoization._なソレですが、ちょっと前に時間をかけて検討してみた map でもそれなりの効果がありそうな気がする。
テキストには p.16 の sqrt とか p.34 の accumlate 等の走り書きがありますが、ポイントとしては

というナニで memoize する効果がありそげ。

で、色々仕込んで map の動作を確認してみるに、入力なリストが 10000 件にな時点で処理にやたらに時間がかかる事が判明。終わるまで待っていられない。何かトンデモなボケをぶちカマしているに違いない。

で、色々考えるに

(define (reverse l)
  (define (reverse-iter l r)
    (if (null? l)
	r
	(reverse-iter (cdr l) (cons (car l) r))))
  (reverse-iter l '()))

みたいなナニで、memoize な効果は十分なのかなあ。確認してみたいんですが時間ナシ。帰宅後はリカバリな作業がわしを待っている。とほほほ。

追記

名前 let の処理で SIGSEG する。ここはテキストでは触れられていない部分なんですが、解決にトライした方が良さげ。