Yコンビネータ
いろいろ弄っているうちに,それらしいものは出来たのだが,まだまったく理解できていない.
fact = lambda {|f| lambda {|n| (n==0)? 1: n * f[n-1] }} y_combinator = lambda {|g| lambda {|f| g[ lambda {|x| f[f][x]} ]}[ lambda {|f| g[ lambda {|x| f[f][x]} ]}] } end p y_combinator[fact][5]
いろいろ弄っているうちに,それらしいものは出来たのだが,まだまったく理解できていない.
fact = lambda {|f| lambda {|n| (n==0)? 1: n * f[n-1] }} y_combinator = lambda {|g| lambda {|f| g[ lambda {|x| f[f][x]} ]}[ lambda {|f| g[ lambda {|x| f[f][x]} ]}] } end p y_combinator[fact][5]