转换原子的成语?

Idiom for transducing over an atom?

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

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

 (let [xf1 (map inc) 
       xf2 (map #(+ % 2)) 
       xf #(vec (eduction (comp xf2 xf1) %)) 
       a (atom [1 2 3])] 
   (swap! a xf))
 ;=> [4 5 6]
(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 在传感器中的工作顺序与正常应用程序相反。也就是说,xf2xf1 之前应用。对于每个元素,它先加倍然后递增。
  2. eduction returns 一个序列,所以它与原子中的原始值不同。