Hi! In short:
I have noticed that in most cases I use macros only for lazy arguments evaluation. Why not to make something to use only this feature? It would be light version of macro for clojurescript/clojure and easy to grasp for newcomers and still powerful in programming (with that you could implement binding/scopes/interpreter pattern). I love implicite use of macros where from call point of view the user can't distinguish what is function and what is macro. In long: Generally the macros are used in compile phase to manipulate AST (or just data structures because Clojure is homoiconic) to produce code in order to be consumed in evaluation phase. It is nice to include new language constructs with use of macros but as my experience points out for most time I use macros only for changing evaluation moment/order. Maybe there should be some construct like "defnlazy" for which you write normal function but all input arguments are evaluated only when you explicitly evaluate them. What we gain? We don't have to deal with # ` @ list eval and separate thoughts on read/eval phases, but we still must explicitly say ~ to deref passed block of construct as argument. Also there are some problems to grasp: - is it safe to implicite convert blocks of construct from statements to deref objects - how it should behave when you pass not deref object to another discussed "defnlazy" - maybe there shouldn't be any defnlazy but you should just implement it in arguments destruction so you can use constructs like: (defn mycrazyif [ statement ~onsuccess ~onfailure ] (if statement ; just evalutated with mycrazyif call @onsucess ; deref block in case of success @onfailure)) ; deref block in case of failure With regards, Olek -- 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.