酒井です。

From: Shin-ichiro HARA <sinara / blade.nagaokaut.ac.jp>
Subject: [ruby-list:35117] Re: Y Combinator
Date: Tue, 14 May 2002 17:53:29 +0900

> ブロックの中で、そのブロックを表す(疑似)変数があると、便利かも
> しれませんね。現状だとこんな感じになりますか。
> 
>    def proc2(&f)
>      def f.[](x); call(self, x); end
>      f
>    end
>    p proc2{|selF, n| n == 0 ? 1 : n * selF[n-1]}[5] #=> 120

似たようなので、こんなのとかどうでしょう?

class Proc
  def self.new_rec(&block)
    selF = new{|*args| block[selF, *args] }
  end
end

p Proc.new_rec{|selF,n| n.zero? ? 1 : n * selF[n - 1]}[5] #=> 120

-- さかい