【发布时间】:2016-02-01 16:04:30
【问题描述】:
我正在尝试使用 clojure reducers 库,但对于何时将组合函数作为 reducers/fold 函数的一部分调用,我有点困惑。为了查看什么时候被调用,我创建了以下示例:
(def input (range 1 100))
(defn combine-f
([]
(println "identity-combine")
0)
([left right]
(println (str "combine " left " " right))
(max (reduce max 0 left)
(reduce max 0 right))))
(defn reduce-f
([]
(println "identity-reduce")
0)
([result input]
(println (str "reduce " result " " input))
(max result input)))
(clojure.core.reducers/fold 10 combine-f reduce-f input)
;prints
identity-combine
reduce 0 1
reduce 1 2
reduce 2 3
reduce 3 4
.
.
.
reduce 98 99
我期望当 fold 执行时,输入将被分成大约 10 大小的组,每个组使用 reduce-f 减少,然后使用 combine-f 组合。但是运行上面的代码,似乎 combine 函数只作为一个身份被调用一次,并且整个输入使用 reduce-f 减少。谁能解释我为什么会看到这种行为?
谢谢,
马特。
【问题讨论】:
标签: clojure parallel-processing