Hi John, 

Thanks for your detailed explanation of the inner workings of my code! I 
have been confused by the behavior of Clojure's mutable data structures 
quite often, but after reading your explanation it finally starts to make 
sense. 

I also tried to explain why your code works:

Everything starts with an empty map of *acc* that is bound to *acc2* (the 
accumulator of the inner reduce):

;; Inner reduce
(assoc {} :a 1)                            ;; --> {:a 1}
(assoc {:a 1} :b 2)                     ;; --> {:a 1 :b 2}

;; This map is then returned to the outer reduce and bound again to *acc2*
;; In the next step *acc* will again be the start map for the inner reduce:

;; Inner reduce
(assoc {:a 1 :b 2} :a (+ 1 9))       ;; --> {:a 10, :b 2}
(assoc {:a 10, :b 2} :b (+ 2 98)) ;; --> {:a 10, :b 100}
(assoc {:a 10, :b 100} :c 0)        ;; --> {:c 0, :a 10, :b 100}

Best regards,

Stefan

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to