Here's a bit more of playing around at the repl.
clojure.core=> a b
#<Atom@7b603522: {:color :blu}>
#<Atom@69408a75: {:color :red}>
clojure.core=> (for [[x y] [[a @b] [b @a]]] (swap! x assoc :color (:color y)))
({:color :red} {:color :blu})
clojure.core=> a b
#<Atom@7b603522: {:color :red}>
#<Atom@69408a75: {:color :blu}>
clojure.core=> (for [[x y] [[a @b] [b @a]]] (swap! x merge y))
({:color :blu} {:color :red})
clojure.core=> a b
#<Atom@7b603522: {:color :blu}>
#<Atom@69408a75: {:color :red}>
clojure.core=> (map #(swap! %1 merge %2) [a b] [@b @a])
({:color :red} {:color :blu})
clojure.core=> a b
#<Atom@7b603522: {:color :red}>
#<Atom@69408a75: {:color :blu}>
clojure.core=> (map #(swap! %1 assoc :color (:color %2)) [a b] [@b @a])
({:color :blu} {:color :red})
clojure.core=> a b
#<Atom@7b603522: {:color :blu}>
#<Atom@69408a75: {:color :red}>
note, map & for are lazy, so you'll need a (doall) or something else
to force evaluation (I think).
Or, you could just use doseq
clojure.core=> a b
#<Atom@7b603522: {:color :blu}>
#<Atom@69408a75: {:color :red}>
clojure.core=> (doseq [[x y] [[a @b] [b @a]]] (swap! x assoc :color (:color y)))
nil
clojure.core=> a b
#<Atom@7b603522: {:color :red}>
#<Atom@69408a75: {:color :blu}>
clojure.core=> (doseq [[x y] [[a @b] [b @a]]] (swap! x merge y))
nil
clojure.core=> a b
#<Atom@7b603522: {:color :blu}>
#<Atom@69408a75: {:color :red}>
Cheers, Jay
On Mon, Jan 30, 2012 at 8:07 AM, Meikel Brandmeyer (kotarak)
<[email protected]> wrote:
> Hi again,
>
> or more like this:
>
> (defn exchange!
> [a b & {:keys [f] {f (fn [_ v] v)}}]
>
> (let [av @a bv @b]
> (alter a f bv)
> (alter b f av)))
>
> (defn exchange-color!
> [a b]
> (exchange! a b :f #(assoc %1 :color (:color %2))))
>
> (exchange-color! a b)
>
>
> Sincerely
> Meikel
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to [email protected]
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en