Clojure传感器是否渴望?

haw*_*eye 6 reduce dictionary clojure eager-loading transducer

在这篇博客文章"JavaScript中的CSP和传感器"中,作者指出:

首先,我们必须认识到许多数组(或其他集合)操作map,filter并且reverse可以用a来定义reduce.

那么我们在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]
Run Code Online (Sandbox Code Playgroud)

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

Bey*_*mor 14

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

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

您可以在源中看到sequence用于在具有换能器的集合上构建延迟序列的位置.