3

平方数の先頭からシーケンスを作成し、それを前の結果に追加する方法は?

7 => 49, 56, 63, ...

def make_sequence(number)
  lambda { number*number ??? }
end

num = make_sequence(7)
num.call #=> 49
num.call #=> 56
...
4

3 に答える 3

3

クロージャーを使用した最初のアイデアに従って、次のように書きます。

def make_sequence(n)
  x = n**2 - n
  lambda { x += n }
end

num = make_sequence(7)
p num.call #=> 49
p num.call #=> 56
于 2012-10-31T10:10:18.247 に答える
2

列挙子を使用する

def make_sequence(start)
  pos = start**2
  Enumerator.new do |y|
    loop do
      y.yield(pos)
      pos += start
    end
  end
end

seq = make_sequence(7)
seq.next   #=> 49
seq.next   #=> 56

...
于 2012-10-31T10:05:15.907 に答える
2

ファイバーバージョン:

def make_sequence(num)
  inc = num
  num = num*num
  Fiber.new do
    loop do
      Fiber.yield(num)
      num += inc
    end
  end
end

a = make_sequence(7)
p a.resume  #=> 49
p a.resume  #=> 56
p a.resume  #=> 63
...
于 2012-10-31T10:08:52.337 に答える