On Fri, Oct 30, 2009 at 4:42 PM, Chick Corea <chick.zco...@gmail.com> wrote:
> > Is everything in Clojure immutable? For example, w/ this code-snippet > > (let [x nil] > ;; do something and modify 'x' > ) > > how does one modify the value of 'x' ? > > (let [x nil] (def x true)) > > this doesn't work. the "def' interns and defines a (dynamic) root- > binding > for 'x' which is accessible outside the lexical closure. > Welcome to functional programming :) Yes defs like that are generally looked down upon because all defs are top-level anyway. > So I want to ask, am I in the minority in thinking that read-only > local bindings limit > the programmer a lot. The only alternative that I see (w/ my limited > imagination) > is to create a "let" scope at the exact place that one needs it. But, > IMO, that > sucks - sorry for the vernacular; but it is wildly inconvenient for me > for many reasons. > That's the whole point of FP, referential transparency. With assignment you lose that. Clojure provides a great number of tools for dealing with FP style programming. If you really need mutability use a reference type- atom, ref. (def x (atom 0)) (reset! x 1) @x -> 1 > Do both of these statements intern a symbol? Or does the 2nd set the > currently > interned symbol to a new value ? > > (def x 1) > (def x 2) > I believe this means: define a new var with the symbol 'x, bind it to the value 1. bind that var to the value 2. While it takes some time to get your head around the effect on programming style, you'll be pleasantly surprised when you decide to add concurrency into your program. Even if you don't, I think you'll find your programs generally easier to debug. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---