プログラムに計算式とかせるのがすき6 君のこたえを覚えておきたい

今日はメモ化をしてみようかと思ったんだ。とりあえず、メモ化を分離しないで、関数の中でキャッシュを持っておく形。しかも呼ばれたその時限りのローカルキャッシュ。…フィボナッチ数以外には使えないね。そんなこともないかもしれないけど。

(define (fib4 n)
  (let ((cache ()))
	(define (fib n)
	  (cond ((= n 0) 0)
			((= n 1) 1)
			(else (+ (fib (- n 1))
					 (fib (- n 2))))))
	(define (inner-fib n)
	  (if (assoc n cache)
		  (cdr (assoc n cache))
		  (let ((result (fib n)))
			(set! cache (append (cons n result)))
			result)))
	(inner-fib n)))

ふむ、うまく行っていない。こんどもう少し悩んでみる。