Thanks a lot James. It seems I completely missed the order of let and doseq.


On Sun, Apr 5, 2015 at 1:12 PM, James Reeves <ja...@booleanknot.com> wrote:

> 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.
>



-- 
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.

Reply via email to