正木です。
Anonymous Method は良い方法が見付からなかったので結局次の様にしました。

class Sequence
  def initialize(list=[],*parameter)
    @list=list
    @para=parameter
    if @para && @para[0].type==Symbol
      @symbol=@para.shift
    elsif @para && @para[0].type==Method
      @method=@para.shift
    end
    if block_given?
      begin
	str=yield
	@lambda=eval("lambda{"+str+"}")
#       /\|([\w,]*)\|\s(.*)$/m=~ yield
#       @lambda=eval("def self.anonym(#{$1});#{$2};end;method(:anonym)")
      rescue NameError
	@proc=proc
      end
    end
  end

  def [](n)
    @list[n] || 
      (if @lambda
        @list[n]=@lambda.call(n,*@para)
      elsif @symbol 
	@list[n]=send(@symbol,self,n,*@para)
      elsif @method
	@list[n]=@method.call(self,n,*@para)
      elsif @proc
	@list[n]=@proc.call(self,n,*@para)
      end)
  end
...
end

以下のような書き方が全て大丈夫の筈です。

Prime =Sequence.new([2,3]){"|n|
  m=self[n-1]+2
  m += 2 while self.find{|k| break if k*k>m; m % k == 0}
  m "}

def sieve(seq, n)
   m = seq[n - 1] + 2
   m += 2 while seq.find{|k|
     break if k * k > m
     m % k == 0
   }
   m
end

Prime1 = Sequence.new([2,3],:sieve)
Prime2 = Sequence.new([2,3], method(:sieve))
Prime3 = Sequence.new([2,3], Object.new.instance_eval{
                        def sieve(seq, n)
                          m = seq[n - 1] + 2
                          m += 2 while seq.find{|k|
                            break if k * k > m
                            m % k == 0
                          }
                          m
                        end
                        self}.method(:sieve))


def (Power={}).[](x)
  super || Power[x]=Sequence.new([1],x){"|n,x| x*self[n-1]"}
end

def power(seq,n,x)
  x*seq[n-1]
end

def (Power1={}).[](x)
  super || Power[x]=Sequence.new([1],:power,x)
end

def (Power2={}).[](x)
  super || Power[x]=Sequence.new([1],method(:power),x)
end

def (Power3={}).[](x)
  super || Power3[x]=Sequence.new([1]){|seq,n| x*seq[n-1]}
end

但し最後の例は問題ないですが

Prime =Sequence.new([2,3]){|seq,n|
  m=seq[n-1]+2
  m += 2 while seq.find{|k| break if k*k>m; m % k == 0}
  m }
や
Fibonacci=Sequence.new([0,1]){|seq,n| seq[n-2]+seq[n-1]}
等は副作用の危険があります。