Chi*_*ron 4 lisp clojure lazy-evaluation
为什么Clojure的反向函数的设计者决定返回的序列不是一个懒惰的?
Clojure通常包含懒惰序列.
Sco*_*ott 11
当然,这是因为根据定义,为了反转一个序列,你必须知道另一端是什么,以便返回将成为反向集合中第一个项目的内容.
因此,序列必须是有限的,你必须对它进行评估才能使用它的结尾.
附录:
反向作为无限序列没有意义,(尽管可以说无限序列并不总是懒惰的先决条件).
如果您要撤消一个集合,那么您已经将它加载到内存中; 它不需要计算.
rseq返回以相反顺序遍历集合的seq.它仅适用于可逆集合,如矢量,排序集和排序映射.
reverse将反转任何有限的seq,但这样做的代价是通过所有项目并将它们整理到列表中.它被实现为(reduce conj () coll).这显然不是懒惰的.