From: Shin-ichiro HARA Date: 2002-05-14T18:05:20+09:00 Subject: [ruby-list:35118] Re: Y Combinator 原です。 ># g[] の代わりに yield() を使う >def y_rec > proc{|f| > yield(f[f]) > }[ > proc{|f| > yield(proc{|y| f[f][y]}) > } > ] >end yield やメソッドを使うと一気に Ruby らしくなりますね。 逆に言うと Ruby で Ruby らしくないプログラムが書けるので、いわゆ るラムダ計算をしたいだけだったら、Ruby で十分、あの括弧の山は実は 必ずしも必要でないんだ、というのは発見でした。 ># 再帰Procを作るメソッドをライブラリで提供してもよさそうな… こういうのはどうかな。 class Proc def y_comb proc{|f| self[f[f]] }[ proc{|f| self[proc{|x| f[f][x]}] } ] end end fact = proc{|f| proc{|n| n == 0 ? 1 : n * f[n-1]}} p fact.y_comb[5] #=> 120