計算結果を保存して「記憶させる」と,同じ引数を使って繰り返し呼び出される関数のスピードを高めるが,より多くのメモリを使用することになる.

関数の定義から始める

以下は,韓国語で整数の名前を返す関数である:

同じ引数でこの関数を繰り返し呼び出すと,同じだけの時間がそれぞれの呼出しにかかる:

前に計算した値を関数に記憶させる

このイディオムを使って,前に計算した値を関数に覚えさせる(関数を「記憶させる」):

そのイディオムをintegerInKorean関数に適用する:

記憶させた関数を特定の引数で最初に呼び出すときには,記憶させていない関数を呼び出す場合と同じ時間がかかる:

その後の呼出しでは,一から計算する代りに,関数は前に計算した結果を取り出すので,同じ引数を使った場合にはずっと速く結果が出る.この場合,関数はほぼ200倍の速さで実行される:

記憶させた値のリストを見る

integerInKoreanをいくつかの値で呼び出す:

?(Information)を使って,記憶させた値を見る:

記憶させた値を削除する

関数の定義だけでなく,記憶させた値も削除する:

シンボルに関連付けられている定義はなくなり,このシンボルが使ったメモリも取り戻された:

注釈
記憶させた関数の定義を変更する前に,記憶させた値が新しい定義と適合しないことがあるので,まずClearを使って関数に記憶させた値を消去すべきである.
記憶は,再帰関数のスピードを高めるためによく使われる.