为什么Clojure的反向函数返回非惰性序列?

Chi*_*ron 4 lisp clojure lazy-evaluation

为什么Clojure的反向函数的设计者决定返回的序列不是一个懒惰的?
Clojure通常包含懒惰序列.

Sco*_*ott 11

当然,这是因为根据定义,为了反转一个序列,你必须知道另一端是什么,以便返回将成为反向集合中第一个项目的内容.

因此,序列必须是有限的,你必须对它进行评估才能使用它的结尾.

附录:

反向作为无限序列没有意义,(尽管可以说无限序列并不总是懒惰的先决条件).

如果您要撤消一个集合,那么您已经将它加载到内存中; 它不需要计算.

  • @Chiron但是已经阅读了所有的结尾,没有任何延迟的意义. (3认同)
  • 来自Clojure的喜悦:"Clojure中懒惰的主要优点是它阻止了在计算过程中完全实现中间结果"......"懒惰保证了在任何给定步骤中序列都不会在内存中完全实现".在逆转的情况下,我们没有中期结果.这一切都是通过reduce&conj完成的. (3认同)

Ale*_*min 8

rseq返回以相反顺序遍历集合的seq.它仅适用于可逆集合,如矢量,排序集和排序映射.

reverse将反转任何有限的seq,但这样做的代价是通过所有项目并将它们整理到列表中.它被实现为(reduce conj () coll).这显然不是懒惰的.