From: Takaaki Tateishi Date: 2002-07-18T13:13:15+09:00 Subject: [ruby-dev:17708] Re: self in block At Thu, 18 Jul 2002 11:53:29 +0900, > Fact=Sequence.new([1]){ n*self[n-1]} > の self が Fact を指してくれないと困ります。 ざっと作ったものですが,今の状態でもこういうことはできます. class Sequence U = proc{|f| f[f]} def initialize (list =[], *parameter, &block) @list=list @para=parameter @lambda=block end def Sequence.new_rec(*args) U[proc{|f| Sequence.new(*args){|x| yield(f[f])[x]}}] end def [](n) @list[n] || @list[n] = @lambda.call(n,*@para) end end Fact=Sequence.new_rec([1]){|f| proc{|n| n * f[n-1]}} p Fact p Fact[4] ブロックを評価するオブジェクトを特殊な変数(self以外がいいです が…)で示すことには反対ではありません. -- Takaaki Tateishi