(apply-generic op . args)

教育者, 将軍, 栄養士, 心理学者, 親はプログラムする. 軍隊, 学生, 一部の社会はプログラムされる. - 計算機プログラムの構造と解釈 序文

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