在这篇博客文章"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传感器是否渴望?
(eduction ..)
在REPL中调用返回看起来像序列的东西(即" (1 2 3)
"之类的东西).但是如果你检查这个返回值是否是一个序列(通过seq?
),你得到false
.
问题: Eduction究竟是什么?它只是一个值列表,将逐个送入减少函数吗?
是什么区别:
(transduce (comp fn-1 fn-2 fn-3) conj vector-collection)
Run Code Online (Sandbox Code Playgroud)
和
(eduction fn-1 fn-2 fn-3 vector-collection)
Run Code Online (Sandbox Code Playgroud)
我读过教育文档,但不明白教育的目的.