用于转换原子的成语?

时间:2015-10-09 08:42:02

标签: clojure clojurescript transducer

将传感器应用于原子值的惯用方法是什么?

这似乎可以完成这项工作,但我不确定是否正确(和风格^^)。

 (let [xf1 (map inc) 
       xf2 (map #(+ % 2)) 
       xf #(vec (eduction (comp xf2 xf1) %)) 
       a (atom [1 2 3])] 
   (swap! a xf))
 ;=> [4 5 6]

1 个答案:

答案 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]

您需要注意两件事。

    传感器中的
  1. comp与正常应用的工作顺序相反。也就是说,在xf2之前应用xf1。对于每个元素,它会加倍然后递增。
  2. eduction返回一个序列,因此它与原子中的原始值不同。