Dereferencing an atom will give you the value of the atom at the time you dereferenced it. So at the start of the doseq loop, you deref the atom and get back an immutable vector of values. It's the same as writing:
(let [data @a-data] (doseq [element data] ...)) You dereference first, and then you iterate over that fixed sequence. The value of "a-data" might change, but the dereferenced "data" does not. - James On 5 April 2015 at 18:00, Shahrdad Shadab <shahrd...@gmail.com> wrote: > Hi folks > > It may seem silly question but why when I doseq over a vector that is > wrapped in an atom and change the vector using swap! while I am inside > doseq, the doseq sets to the beginning of the vector intermittently: > > > (def a-data (atom [15 9 8 1 4 11 7 12 13 14 5 3 16 2 10 6])) > > (defn switch-two-elements [the-vector] ... ) ;; swaping two elements in > given vector > > (doseq [element @a-data] > (println @a-data) (println element) > (swap! a-data switch-two-elements)) > > [15 9 8 1 4 11 7 12 13 14 5 3 16 2 10 6] > 15 > > [1 9 8 15 4 11 7 12 13 14 5 3 16 2 10 6] > 9 > > [1 4 8 15 9 11 7 12 13 14 5 3 16 2 10 6] > 8 > > [1 4 5 15 9 11 7 12 13 14 8 3 16 2 10 6] > 1 ==> I expect this to be 15 > > I suspect the reason would be the same as the one behind not changing a > collection in java while iterating over it. > > I appreciate any insight on this. > > Thanks a lot > Best regards > > > > > -- > Software Architect & Computer Scientist > > -- > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.