あなたがルビープログラマーなら、ハッシュブロックのメモ化パターンに出くわしたかもしれません。簡単な例として、フィボナッチ数列のメモ化バージョンを紹介します。
fib_hash = Hash.new do |h,i|
h[i] = h[i-1] + h[i-2]
end
# establish the base cases
fib_hash[1] = 1; fib_hash[2] = 1
もちろん、これがフィボナッチ数列のメモ化バージョンを作成する唯一の方法ではありません。次のこともできます。
@cache = {}; @cache[1] = 1; @cache[2] = 1
def memo_fib(n)
@cache[n] ||= (memo_fib(n-1) + memo_fib(n-2))
end
うまくいけば、ハッシュブロックのメモ化パターンが他の多くの言語ではるかに一般的な2番目のバージョンにどのようにマッピングされるかがわかります。私が知りたいのは、2つのバージョンの間に違いがあるかどうかです。ハッシュブロックバージョンの方が効率的だという気持ちを揺るがすことはできませんが、その理由を正当化することはできません。