Я могу написать ленивый Фибоначчи в Clojure так:Ленивый Фибоначи в Рубине
(def fib (lazy-cat [1 1] (map +' fib (rest fib))))
и я пытаюсь (безуспешно), чтобы записать его в Ruby, как это:
fib = Enumerator.new do |yielder|
yielder << 1 << 1
fib.zip(fib.drop(1)).map do |a,b|
yielder << (a + b)
end
end
В упрощенный случай, это работает:
fib = Enumerator.new do |yielder|
yielder << 1 << 1
puts "here"
end
puts fib.take(2).inspect
puts fib.drop(1).take(1).inspect
, но это не делает:
fib = Enumerator.new do |yielder|
yielder << 1 << 1
puts "here"
fib.drop(1)
end
puts fib.take(2).inspect
puts fib.drop(1).take(1).inspect
Почему этот последний пример дает мне ошибку SystemStackError: stack level too deep
?
'drop' - это функция, основанная на перечислителе. Попробуйте получить доступ к элементу внутри перечислителя по методу oldschool по индексу. – mudasobwa