Greg Harman a écrit : > One solution is to use (binding), which still requires a global var, > but gives each eval it's own binding of that var: > > user=> (def x) > #'user/x > user=> (def expr '(+ x 4)) > #'user/expr > user=> (binding [x 3] (eval expr)) > 7 > user=> x > java.lang.IllegalStateException: Var user/x is unbound. > (NO_SOURCE_FILE:0) >
You also can do something like this: (defmacro let-eval [vars expr] (let [bindings (mapcat #(list (list `quote %) %) vars)] `(eval (list 'let [...@bindings] ~expr)))) (let [x 12] (let-eval [x] '(+ x 2))); returns 14 Christophe --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---