At Thu, 18 Jul 2002 21:28:41 +0900,
> こういうことが出来るというのは理論的には大変興味がありますが、流石に実際に
> 採用する気にはなれません。

それでは,再帰用のクラスを別に作ると言うのはどうでしょうか?
または,再帰用にデフォルトで自分自身を@lambdaに渡すというの
でも良いと思います.

class Sequence
  def initialize (list =[], *parameter, &block)
    @list=list
    @para=parameter
    @lambda=block
  end

  def [](n)
    @list[n] || @list[n] = @lambda.call(n,*@para)
  end
end

class RecSequence < Sequence
  def [](n)
    @list[n] || @list[n] = @lambda.call(self,n,*@para)
  end
end

Fact=RecSequence.new([1]){|f,n| n * f[n-1]}
p Fact
p Fact[4]
-- 
Takaaki Tateishi <ttate / kt.jaist.ac.jp>