I want a macro that generates two defn's. (defn vote-suspend [this] (deref (.state this))) (defn vote-resume [this state] (reset! (.state this) state))
I have written this: (defmacro suspendable [prefix] `(do (defn ~(symbol (str prefix "suspend")) [~'this] (deref (.state ~'this))) (defn ~(symbol (str prefix "resume")) [~'this ~'state] (reset! (.state ~'this) ~'state)))) It works but it has both defn's in *do *block*.* (*do* (clojure.core/defn vote-suspend [this] (clojure.core/deref (.state this))) (clojure.core/defn vote-resume [this state] (clojure.core/reset! (.state this) state))) is it possible to generate defn's without *do* ? I tried this: (defmacro suspendable [prefix] (list `(defn ~(symbol (str prefix "suspend")) [~'this] (deref (.state ~'this))) `(defn ~(symbol (str prefix "resume")) [~'this ~'state] (reset! (.state ~'this) ~'state)))) But it creates parentheses around defn: user> (macroexpand-1 '(suspendable vote-)) ((clojure.core/defn vote-suspend [this] (clojure.core/deref (.state this))) (clojure.core/defn vote-resume [this state] (clojure.core/reset! (.state this) state))) Maybe splice it? (defmacro suspendable [prefix] ~@(list `(defn ~(symbol (str prefix "suspend")) [~'this] (deref (.state ~'this))) `(defn ~(symbol (str prefix "resume")) [~'this ~'state] (reset! (.state ~'this) ~'state)))) *Attempting to call unbound fn: #'clojure.core/unquote-splicing* *unquote-splicing* must be inside syntax-quote block, right ? This creates parentheses again: (defmacro suspendable [prefix] `( ~@(list `(defn ~(symbol (str prefix "suspend")) [~'this] (deref (.state ~'this))) `(defn ~(symbol (str prefix "resume")) [~'this ~'state] (reset! (.state ~'this) ~'state))))) Is it not possible to return two sexp's from a macro ? -- 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