0

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

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

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

1 回答 1

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. compin 转换器的工作顺序与正常应用程序相反。也就是说,xf2在 之前应用xf1。对于每个元素,它先加倍然后递增。
  2. eduction返回一个序列,因此它与原子中的原始值不同。
于 2015-10-09T10:09:03.427 回答