Rubyのメモ化をメタプログラミングを使わずにやる
一度は諦めたこの方法でできた
def memoize(f) dp = {} lambda {|*arg| dp[arg] || dp[arg] = f.call(*arg)} end def ack(m, n) if m == 0 then n + 1 elsif n == 0 then ack(m - 1, 1) else ack(m - 1, ack(m, n - 1)) end end ack = memoize(lambda{|*arg| ack(*arg)}) ack.call(3, 9) => 4093
lambdaで包めばよいのだ!