什么是clojure Eduction?

Geo*_*rge 4 clojure

(eduction ..)在REPL中调用返回看起来像序列的东西(即" (1 2 3)"之类的东西).但是如果你检查这个返回值是否是一个序列(通过seq?),你得到false.

问题: Eduction究竟是什么?它只是一个值列表,将逐个送入减少函数吗?

Pio*_*dyl 5

根据传感器的文档:

要捕获将传感器应用于coll的过程,请使用eduction功能.它需要任意数量的xforms和最终的coll,并将传感器的可简化/可迭代应用程序返回到coll中的项目.每次调用reduce/iterator时都会执行这些应用程序.

因此,它是将传感器应用于集合的抽象,该集合产生可还原/可迭代的东西.你可能想知道有什么区别:

Seqs与迭代器的不同之处在于它们是持久且不可变的,而不是有状态的游标到集合中

因为他们将在每次缩减/迭代时使用所提供的集合应用换能器,它们与seq的语义不同.