如何迭代clojure eduction - 没有创建seq?

时间:2018-02-28 03:58:31

标签: clojure iteration

为了这个问题,我们假设我创建了以下教育。

(def xform (map inc))
(def input [1 2 3])
(def educt (eduction xform input))

现在我想将educt传递给某个可以进行某种缩减的函数。我想传递educt而不是xforminput的原因是我不想将xforminput公开给该函数。如果我这样做,该功能可以简单地执行(transduce xform f init input)。但是,正如我所做的那样,该功能留有一个不能与transduce一起使用的教育。

我知道我可以,例如在教育上使用doseq,但我相信这将创建一个seq - 在对象实例化和缓存使用方面的所有开销。

那么我怎样才能有效地和惯用地迭代一个教育?

当教育实施java.lang.Iterable时,这个问题可能会推广到:

如何在不创建seq的情况下迭代java.lang.Iterable

1 个答案:

答案 0 :(得分:2)

reduce 可以用来做到这一点。

IReduceInit的实例workseduction implements