2014-09-04 50 views
6

在此博客條目,"CSP and transducers in JavaScript",筆者指出:Clojure換能器是否渴望?

首先,我們必須認識到,許多陣列(或其他集合),如mapfilterreverse操作可以在一個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的傳感器躍躍欲試?

回答

14

換能器是非常簡單的功能 - 它們沒有懶惰的概念,或者實際上它們是如何應用的。這就是這個想法的美妙之處 - 通過傳感器,我們可以將mapfilter之類的功能與它們的操作分開。

所以,是的,他們可以被用來建立懶惰的序列,以及渠道和減少。雖然傳感器功能調用本身是急切的,但它取決於您傳感器調用它的任何事情。懶惰的序列可能會懶散地調用傳感器,因爲它們被消耗掉,而減速器會急切地使用它們來吐出減少量。

您可以看到in the source其中sequence用於在帶有傳感器的集合上構建惰性序列。