Hi, I think you have some misunderstandings here how things work.
* the # notation works only *inside* a syntax-quote. * you have to create locals with # notation. * var is a special form which looks up the Var named by the given Symbol. (defmacro create-database-methods [table] (let [kw-table (keyword table)] `(do (defn ~(symbol (str "drop-" table)) [] (try (drop-table ~kw-table) (catch Exception _))) (defn ~(symbol (str "insert-" table)) [data#] (insert-value ~kw-table (keys data#) (vals data#))) (defn ~(symbol (str "update-" table)) [id# attribute-map#] (update-values ~kw-table ["id=?" id#] attribute-map#)) (defmacro ~'select-userentry [id# & body#] `(with-transaction (with-query-results rs [~~(str "select * from " table " where id=?") ~id#] ~...@body#)))))) Note: this will only work with a literal string as table argument! (create-database-methods "table") As a general advice: you are probably better of writing these as functions and then specialise them via currying. (defn drop [table] (try (drop-table table) (catch Exception _))) (defmacro create-database-methods [table] (let [kw-table (keyword table)] `(do (def ~(symbol (str "drop-" table)) (partial drop ~kw-table)) ...))) Hope this helps. Sincerely Meikel -- 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