一个已实现的序列是内存中对象的链,链条中的每个链接都指向一个值和下一个链接,直到你最终到达一个函数对象,这是序列中尚未实现的剩余部分。对实现链中任何链接的引用都会导致从该点开始到链的其余部分被强引用,无法被垃圾回收(gc'ed)。
如果你只是指向该链的未实现“末尾”,那么你“后面”的所有链接都可以被收集。当“持有头端”时,这个指针指向链的开始,这阻止了从开始到未实现点的N个链接被保存在内存中。
例如
(def r (repeat 100000000 "abcdef")) ;; r holds a strong reference to the head
(count r)
vs
(count (repeat 100000000 "abcdef"))
可以遍历序列seq,允许gc'ed从计数器后面的链接开始。(注意,《range》通常用于这些示例,但它具有针对典型情况的优化《count》。)