あおきです。 In mail "[ruby-list:28333] Re: argument to instance_eval block(Re:" 正木 功 <GEC01122 / nifty.ne.jp> wrote: > 正木です。 > 次のような script (これは "Ruby プログラミング入門" p202 の fib2.rb > を見て こんな便利な方法があるのかと思って一般化してみたものです。 > 演算子や sum,limit 等を定義しておけば、無限数列や無限級数を自然に扱 > うことができて非常に便利です。) いやあ、やれるからといってやる必要はないですから。特にこの状況なら self にアクセスできればいいだけなんで、instance_eval はオーバー スペックでしょう。素直に self を yield してやればいいと思います。 ------------------------------------------------------------------- 青木峰郎 class Sequence include Enumerable def initialize( list, *x, &block ) @list = list @x = x @proc = block end def []( n ) @list[n] ||= @proc.call( self, n, *@x ) end def each i = 0 loop do yield self[i]; i += 1 end end end def (Power = {}).[]( x ) super || Power[x] = Sequence.new([1],x) {|seq, n, x| x * seq[n-1] } end m = ARGV[0].to_i p Power[2].find {|x| x > m }