【发布时间】:2014-10-03 04:07:59
【问题描述】:
我可以像这样在 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是一个基于枚举器的函数。尝试通过索引以老式方式访问枚举器内的元素。
标签: ruby clojure fibonacci lazy-sequences