Re: swap! and atom behavior
Joop Kiefte <ikojba <at> gmail.com>
2012-08-01 12:31:43 GMT
Just pay attention that when using later elements you don't need the
earlier elements, and you should be fine. (IIRC)
2012/8/1 Vinay D.E <devinay <at> gmail.com>:
> Thanks Sean & Carlo for the detailed comments!
> The gap in my understanding was exactly *how* lazy 'lazy evaluation' is, so
> the evaluation of 'i' is deferred until it is totally unavoidable.
> Just curious, but if I chained a large number of such lazy constructs, isn't
> there danger of a big unpredictable spike in CPU / Memory if something
> deeply nested is accessed ?
> Is there someplace where this is discussed in detail, pros / cons, caveats,
> concepts etc ? Any books that you think I should read ?
> On Tuesday, 31 July 2012 12:05:13 UTC+5:30, Sean Corfield wrote:
>> > I tried putting a print and it works as expected.
>> Because you are realizing the whole of i to print it.
>> > 1) I assumed that printing out [i <at> a] instead of [ <at> a i] should realize
>> > 'i'
>> No, [i <at> a] creates a two-element vector of a lazy-seq and a value (the
>> deref of a). Then, when the REPL prints that vector, it realizes the
>> > 2) If I put a breakpoint in the predicate for take-while, it gets hit (
>> > I
>> Yes, it is hit while i is being realized.
>> > 3) This is the strangest observation of all: In the debugger I can see
>> > that
>> > 'a' is getting incremented, its changing when the breakpoint is hit!
>> > but
>> > the baffling thing is, when the result is printed out, I still get 0 as
>> > the
>> > value for a.
>> Because the value of <at> a is bound before i is realized, so 0 is bound
>> into the vector, and then i is realized during which process you see a
>> being incremented.
>> > Isn't (print i) the same as [i <at> a] ? since i is realized first,
>> > shouldn't
>> > <at> a be correctly printed?
>> No, see above.
>> > Why is the breakpoint showing me that a is changing ?
>> Because it _is_ changing but _after_ the top level of the vector has
>> been evaluated.
>> Sean A Corfield -- (904) 302-SEAN
>> An Architect's View -- http://corfield.org/
>> World Singles, LLC. -- http://worldsingles.com/
>> "Perfection is the enemy of the good."
>> -- Gustave Flaubert, French realist novelist (1821-1880)
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure <at> 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+unsubscribe <at> googlegroups.com
> For more options, visit this group at
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure <at> 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+unsubscribe <at> googlegroups.com
For more options, visit this group at