Rubyで無名再帰
http://kouyatakao.hatenablog.com/entry/2014/02/28/152153
を書いてて、あれ?Rubyって無名再帰どうすんの?と思って調べたらできたのでメモ
class Proc def self_curry self.curry.call(self) end end def fib_closure cache = [] lambda{|f,n| cache[n] ||= n <= 1 ? n : f.call(f, n-2) + f.call(f, n-1) } end fib_o = fib_closure fib_o.self_curry.call(1000) # => 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875