我注意到 Clojure 中的惰性序列似乎在内部表示为链表(或者至少它们被视为只能顺序访问元素的序列)。即使在缓存到内存之后,惰性序列上的访问时间nth
也是 O(n),而不是像向量那样的恒定时间。
;; ...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 alazy vector: question with const