At Thu, 18 Jul 2002 11:53:29 +0900,
> Fact=Sequence.new([1]){<n> 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 <ttate / kt.jaist.ac.jp>