Hello, I'm a long-time Java programmer who's tired of mutability getting in my way. I've been largely enjoying the pervasive use of closures in JavaScript, and though I'd check out Clojure.
So far so good. It installed easily and the REPL is easy to use. I've watched the screencasts and have written a few very simple programs. But I have some general questions: 1. What is the justification for using a map as a function? I find this to be very confusing. 2. In practice, I find myself wincing when needing to decide whether or not to type an open-paren. Is that a common thing? 3. Is there a compendium of recursive idioms, ideally expressed in clojure? Including indentation conventions! (Is there an opportunity for a python inspired pre-processor that interprets indentation as parens?) 4. Why don't long-running clojure programs monotonically increase in heap usage if all data-structures are immutable? 5. In the REPL, isn't it redundant to always have to type the top- level parens? 6. Is there a place to get guidlines on macro idioms? The feature is so powerful that it seems like it would be easy to misuse it and crack a programmers head like a nut with a badly structured macro. I also have some philosophical questions: 1. Isn't the world actually imperative? And mutable? Collaboration *is* a messy proposition in real life. It's hard to fix your car, and even harder to have lots of people fix your car. I find the "it models the real world better" justification for functional programming rather confusing. (Indeed, the CPU and physical memory also have an imperative relationship!) 2. 'Side-effects' are treated almost as a bad word by most functional programming advocates. And yet, aren't ALL programs executed for their side-effects? Does "side effect" perhaps then require a qualification or a tighter definition? Or perhaps side-effects "aren't that bad"? 3. What is the relationship between the "shape" of a clojure program and the runtime call stack? (I ask because a clojure program looks strikingly similar to the callstack of an ordinary program when you 'pause' a thread.) 4. Is it possible (and/or advisable) to introduce a typing system on top of clojure? E.g. a macro-form along the lines of (fnif type_function function args) -- 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