I was experimenting with how binding behaves within a loop and found
some inconsistent results:
(def y 0)
(loop [x 0]
(println "x " x)
(binding [y (inc y)]
(println "y " y)
(if (< x 10) (recur (inc x)))))
The printed lines are what you'd expect:
x 0
y 1
x 1
...
x 10
y 11
But if you then check the value of y afterwards, it is 3. Each time
the above loop is executed, y goes up by another 3. I'm not sure how
I can see the whole stack of bound values, but I did confirm the root
is still 0.
Oddly, the following /does not/ result in left-over bindings:
(loop [x 5]
(binding [y (inc y)]
(println "x " x ", y " y)
(if (> x 0) (recur (dec x)))))
Any ideas on the differences?
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---