代码之家  ›  专栏  ›  技术社区  ›  hawkeye

Clojure传感器渴望吗?

  •  7
  • hawkeye  · 技术社区  · 10 年前

    在该博客条目中, "CSP and transducers in JavaScript" ,作者声明:

    首先,我们必须认识到许多数组(或其他集合)操作,如 map , filter reverse 可以根据 reduce .

    所以 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 回复  |  直到 7 年前
        1
  •  18
  •   David Ongaro    7 年前

    传感器是非常简单的功能——它们根本没有懒惰的概念,事实上,它们是如何应用的。这就是这个想法的美妙之处-通过传感器,我们可以分离如下功能 map filter 从他们所操作的东西。

    所以,是的,他们 可以 用于构建延迟序列以及通道和缩减。虽然换能器函数调用本身很迫切,但这取决于你将换能器交给什么样的东西来调用它。懒惰的序列只能在换能器被消耗时才懒洋洋地调用换能器,而还原器则会急切地使用它们来吐出缩减。

    你可以看到 in the source 哪里 sequence 用于使用传感器在集合上构建延迟序列。