Идиома трансдукции над атомом?

Каков идиоматический способ применения преобразователей к значению атома?

Это, кажется, делает работу, но я не уверен в правильности (и стиле ^^).

 (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 ответ

Решение
(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 возвращает последовательность, поэтому она не совпадает с вашим исходным значением в атоме.
Другие вопросы по тегам