什么是clojure Eduction?

时间:2016-02-23 04:52:50

标签: clojure

调用(eduction ..)会在REPL中返回类似于序列的内容(例如“(1 2 3)”之类的内容)。但是,如果您检查此返回值是否为序列(通过seq?),则会获得false

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

1 个答案:

答案 0 :(得分:5)

根据transducer's doc

  

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

因此,它是将传感器应用于集合的抽象,该集合产生可还原/可迭代的东西。您可能想知道其中的区别:

  

Seqs differ from iterators in that they are persistent and immutable, not stateful cursors into a collection

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