我注意到Clojure中的惰性序列似乎在内部被表示为链表(或者至少它们被当作只有顺序访问元素的序列)。即使在被缓存到内存之后,使用nth
的lazy-seq访问时间是O(n),而不是像向量一样的常量时间。作为矢量的Clojure惰性序列
;; ...created my-lazy-seq here and used the first 50,000 items
(time (nth my-lazy-seq 10000))
"Elapsed time: 1.081325 msecs"
(time (nth my-lazy-seq 20000))
"Elapsed time: 2.554563 msecs"
如何获得恒定时间查找或在Clojure中增量创建一个懒惰矢量?想象一下,在生成惰性向量时,每个元素都是它之前所有元素的函数,所以遍历列表花费的时间成为一个重要因素。
相关问题,只打开了这个不完整的Java代码片段: Designing a lazy vector: problem with const
感谢您的回复!是的,你的斐波纳契范例更类似于我所寻找的东西:惰性创建一个向量。 – ivar 2010-06-22 04:37:40
你也可以在懒惰的'fib'序列上使用'nnth' :)'(nth fib 10)' – NikoNyrh 2017-11-01 13:01:29