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]
Зачем делать 'foo' функцию для' swap! ', А не просто значение для' (reset! A foo) '? Что касается 2. Я был ленив, редактируя, чтобы получить вектор. Относительно 1. Я знал об этом, следовательно, «обратный» порядок в comp. Редактирование для идиоматического '(map inc)', thx. –
Хороший вопрос. В этом случае «swap!» Действительно не отличается от «reset!» С указанными значениями, поскольку атом создается локально и никогда не используется снаружи. Однако атомы предназначены для использования в нескольких потоках, поэтому было бы более идиоматично вставлять логику чтения-вывода в STM. Таким образом, два вызова из разных потоков всегда будут превращать атом дважды. Если чтение является внешней транзакцией, возможно, что результат будет преобразован только один раз. – Davyzhu