exercise 3.27

東の大きな大学の解答と照らし合わせて、正解を確認。
解くのはいいとして、問題はブログにどうやってあげるかだ・・・・

まぁそれはともかくパコパコとフレーム作るのはおもしろかったかな
あとメモ化の便利さを実感。以前に部活の講座で聞いたりもしたが、こうやって実際に書くことで処理の早さなど、色々と実感できた気がする。

追記:(memoize fib)で定義できるか?

  • > 無理・・・なはず。memoizeのなかで引数のfを再帰的に呼び出すがが、memo-fibと違ってfibが呼ばれ、fibはテーブルを作らないのでメモ化はできないはず。

よーするに、

(define mfib (memoize fib))

として、

(mfib 6)

とかやると、mfibの中で(fib 6)が呼び出されるわけで、当然fib自身はメモ化なんてしないから計算も遅いまんま。ただし(fib 6)の帰ってきた結果だけは最後にテーブルに書き込まれるので、同じ引数でmfibを呼び出すと2回め以降はテーブルを参照するので処理が早くなる・・・はず、というか早くなったし。

ちなみに、memo-fibの方はmemoizeの引数が再帰的に、fibでなく、memo-fibを呼ぶのでちゃんとメモ化ができて早くなってる.

しかし、(memoize fib)でうまいことやる方法はないのかな。
実行時にmemoizeの引数を見て、再起の部分を書き換えるとかやったらできそうだが、そんなこと実際にはできないよなぁ・・・。

追記(2008/8/10)
コメントの指摘により誤字を修正 memorize -> memoize