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