clojure - Expanding macros in macros -


i have following macro :

(defmacro add-children [this children]   (map (fn [child] (list '.addchild child)) children)) 

and create following macro :

(defmacro defgom [name & body]  (let [sym (gensym)]   `(let [~sym (model.)]      (add-children sym body))))) 

considering model java class addchild function. expand defgom

(let [*gensym* (model.)]   (.addchild *gensym* (first body))   (.addchild *gensym* (second body))   ...   (.addchild *gensym* (last body))) 

when evaluated, add-children macro gives correct result (the list of .addchild). can't evaluate in defgom macro. "don't know how create iseq from: clojure.lang.symbol". tried ~ or ~@ (given add-children returns list), none worked.

how expand macro inside macro?

ps: know can function rather add-children macro, want know if it's possible macro.

just change last line to:

(add-children ~sym ~@body) 

Comments

Popular posts from this blog

ios - Memory not freeing up after popping viewcontroller using ARC -

Django REST Framework perform_create: You cannot call `.save()` after accessing `serializer.data` -

Why does Go error when trying to marshal this JSON? -