平方数の先頭からシーケンスを作成し、それを前の結果に追加する方法は?
7 => 49, 56, 63, ...
def make_sequence(number)
lambda { number*number ??? }
end
num = make_sequence(7)
num.call #=> 49
num.call #=> 56
...
平方数の先頭からシーケンスを作成し、それを前の結果に追加する方法は?
7 => 49, 56, 63, ...
def make_sequence(number)
lambda { number*number ??? }
end
num = make_sequence(7)
num.call #=> 49
num.call #=> 56
...
クロージャーを使用した最初のアイデアに従って、次のように書きます。
def make_sequence(n)
x = n**2 - n
lambda { x += n }
end
num = make_sequence(7)
p num.call #=> 49
p num.call #=> 56
列挙子を使用する
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
...
ファイバーバージョン:
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
...