将传感器应用于原子值的惯用方法是什么?
这似乎可以完成这项工作,但我不确定是否正确(和风格^^)。
(let [xf1 (map inc)
xf2 (map #(+ % 2))
xf #(vec (eduction (comp xf2 xf1) %))
a (atom [1 2 3])]
(swap! a xf))
;=> [4 5 6]
答案 0 :(得分:2)
(let [xf1 (map inc)
xf2 (map #(* % 2))
foo #(into [] (comp xf2 xf1) %)
a (atom [1 2 3])]
(swap! a foo))
;; => [3 5 7]
您需要注意两件事。
comp
与正常应用的工作顺序相反。也就是说,在xf2
之前应用xf1
。对于每个元素,它会加倍然后递增。eduction
返回一个序列,因此它与原子中的原始值不同。