【发布时间】:2011-03-08 02:00:54
【问题描述】:
Reduce 和归约可让您在序列上累积状态。 序列中的每个元素都会修改累积的状态,直到 到达序列的末尾。
对无限列表调用 reduce 或 reductions 有何影响?
(def c (cycle [0]))
(reduce + c)
这将很快抛出 OutOfMemoryError。顺便说一句,(reduce + (cycle [0])) 不会抛出 OutOfMemoryError(至少在我等待的时候不会)。它永远不会回来。不知道为什么。
有什么方法可以以一种有意义的方式在无限列表上调用 reduce 或 reductions?我在上面的例子中看到的问题是,最终列表的评估部分变得足够大以溢出堆。也许无限列表不是正确的范例。减少生成器、IO 流或事件流会更有意义。在评估并用于修改状态后,不应保留该值。
【问题讨论】:
标签: clojure