ruby1.9:ジェネレータでフィボナッチ数列

とりあえず準備体操。

require 'enumerator'

class Fib
  def fib
    a = 1
    b = 1

    loop do
      yield(a)
      tmp = a;
      a = b;
      b = tmp + b;
    end
  end
end

fib = Fib.new.enum_for(:fib)
g = fib.each

10.times do
  p g.next
end


~/work$ ruby foo.rb
1
1
2
3
5
8
13
21
34
55
クラスを定義しないですむと、もう少しかっこいいなぁ。
いろいろ使えそう…な気はする。


追記
クラスを定義しないでみた。でもlambdaが使いたい…

require 'enumerator'

def fib
  a = 1
  b = 1

  loop do
    yield(a)
    tmp = a;
    a = b;
    b = tmp + b;
  end
end

g = enum_for(:fib).each

10.times do
  p g.next
end