Clojure 的惰性序列缓存

Clojure's lazy-seq caching

Practical Clojure中,作者提到一旦计算出惰性seq值,它就会被缓存。

如果我们从惰性序列中得到非常 的大量值,我们是否会看到内存不足的错误?或者是否有一种机制可以防止这种情况发生(例如,删除旧的缓存值以为新值腾出空间)?

惰性序列中的已实现元素可以像 Clojure 中的任何其他对象一样被垃圾回收,但有一个重要警告。您不应该持有对序列头部的引用。这被称为 "holding the head"。

具体来说,使用 doall 来评估整个序列,或者在使用 map 遍历惰性序列时存储对惰性序列的引用(比如在原子或 def 中)都抱头