What eval does, is wrapping (fn* [] <expression>) around its arguments, compiling that, and calling the resulting function object (except if your list starts with a 'do or a 'def).
While Clojure's compiler is pretty fast, you should try not to use eval. If you want to pass code around you should try something like storing functions in a map or something similar. If you think that you have to eval lists, try wrapping them in (fn [] ...) and eval that form instead. You'll get a function object which was compiled once, but can be called as many times as you want. eg. (defn form->fn [list-to-eval] (eval (list 'fn [] list-to-eval))) ;this returns a fn (def form->fn (memoize form->fn)) ;caches the resulting fns, beware of memory leaks though ((form->fn '(println "Hello World"))) ((form->fn '(println "Hello World"))) ((form->fn '(println "Hello World"))) ; should compile only once Alex -- 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