正木です。

[ruby-math:00413] で

|class Sequence
|  def initialize(list=[],*x)
|    @proc=eval("proc{"+yield+"}")
|.....
|
|は block の中で list や x を変更されるとまづいことになります。

と書きましたが、これがまた勘違いで、scope が initialize の中に
広がるだけなので特に問題はないようです。
例えば
Prime =Sequence.new([2,3]){"|n|
  list=self[n-1]+2
  list += 2 while self.find{|x| break if x*x>list; list % x == 0}
  list "}
と書いても何の問題もありません。

上の事に気付く前に、Method を使えばうまくいくのではないかと思って
次のようにしてみたのですが、これでは method の中から呼ばれた method から
さらに呼ばれた(以下同様の) method 名と衝突する可能性を排除できません。
本当の Anonymous Method を作るにはどうすれば良いでしょうか?

class Object
  def AnonymousMethod(str)
#   eval("lambda{"+str+"}")
    meth="anonymous_temporal"
    meth+="_lambda" while /#{meth}/m=~ str
    /\|([\w,]*)\|\s(.*)$/m=~ str
    eval("def #{meth}(#{$1});#{$2};end")
    eval("method(:#{meth})")
  end
end

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

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