Clojure传感器是否渴望?

时间:2014-09-04 01:45:13

标签: dictionary clojure reduce eager-loading transducer

在此博客文章"CSP and transducers in JavaScript"中,作者声明:

  

首先,我们必须意识到,mapfilterreverse等许多数组(或其他集合)操作都可以用reduce来定义。< / p>

所以then we see Clojure中的一些实现并不是懒惰的,他们非常渴望:

 user> (defn eager-map [f coll]
        (reduce (fn [acc v] (conj acc (f v)))
        []
        coll))
#'user/eager-map
user> (eager-map inc (range 10))
[1 2 3 4 5 6 7 8 9 10]

我的问题是,Clojure传感器是否渴望?

1 个答案:

答案 0 :(得分:14)

传感器是非常简单的功能 - 它们没有懒惰的概念,或者实际上它们如何应用。这就是这个想法的美妙之处 - 通过换能器,我们可以将mapfilter等函数与它们运行的​​东西分开。

所以,是的,他们可以用于构建延迟序列,以及通道和缩减。虽然换能器功能调用本身是急切的,但它取决于您将换能器用来调用它的任何东西。懒惰的序列只能在它们被消耗时懒惰地调用传感器,而减速器会急切地使用它们来吐出减少量。

您可以看到in the source其中sequence用于在带有传感器的集合上构建延迟序列。