計算結果を保存して「記憶させる」と,同じ引数を使って繰り返し呼び出される関数のスピードを高めるが,より多くのメモリを使用することになる.
関数の定義から始める
以下は,韓国語で整数の名前を返す関数である:
同じ引数でこの関数を繰り返し呼び出すと,同じだけの時間がそれぞれの呼出しにかかる:
前に計算した値を関数に記憶させる
このイディオムを使って,前に計算した値を関数に覚えさせる(関数を「記憶させる」):
そのイディオムをintegerInKorean関数に適用する:
記憶させた関数を特定の引数で最初に呼び出すときには,記憶させていない関数を呼び出す場合と同じ時間がかかる:
その後の呼出しでは,一から計算する代りに,関数は前に計算した結果を取り出すので,同じ引数を使った場合にはずっと速く結果が出る.この場合,関数はほぼ200倍の速さで実行される:
記憶させた値のリストを見る
integerInKoreanをいくつかの値で呼び出す:
?(Information)を使って,記憶させた値を見る:
記憶させた値を削除する
関数の定義だけでなく,記憶させた値も削除する:
シンボルに関連付けられている定義はなくなり,このシンボルが使ったメモリも取り戻された:
注釈
記憶させた関数の定義を変更する前に,記憶させた値が新しい定義と適合しないことがあるので,まずClearを使って関数に記憶させた値を消去すべきである.
記憶は,再帰関数のスピードを高めるためによく使われる.