メモ化
最後に、配列のキー位置のエントリが呼び出し側に返される。
この戦略では、メモ化される関数を呼び出す箇所で明示的な対処が必要となる。クロージャが可能な言語では、メモ化はメモ化関数オブジェクトをラップする functor オブジェクトとして暗黙的に実現できる。これを擬似コードで表すと、次のようになる。
factorial の代わりに使われる新たな関数オブジェクト memfact は次のように生成される。
この例では、関数 factorial は construct-memoized-functor を呼び出す前に定義されているものとしている。そしてそれ以降、n の階乗を計算したい場合は常に memfact(n) を呼び出す。Luaなどの言語では、関数名を変えずに置き換えることも可能であり、次のようにできる。
基本的にこのような技法では、生成された functor にオリジナルの関数オブジェクトをアタッチし、必要な場合(無限の再帰呼び出しを避けるため)にオリジナルの関数をエイリアスを通して呼び出す。これを擬似コードで表すと次のようになる。
なお、言語によってはこれらのステップの一部は言語の機能として実装されている。上記はあくまで説明のための擬似コードである。