Hi,

I'm having problems with nested syntax-quotes, or something.

This works fine:
  (use 'clojure.contrib.macro-utils)
  (def *a* nil)

  ;; good
  (defmacro my-macro [& body]
    `(let [name# {#'*a* :new}]
       (macrolet [(~(symbol 'with-my-macrolet) [& body#]
                    (concat (list 'with-bindings 'name#)
                            body#))]
         ~...@body)))

  user> (my-macro (with-my-macrolet *a*))
  => :new


But the macrolet is a little hard to read. My attempts to use nested
syntax-quotes fail miserably:

  ;; uh-oh...
  (defmacro my-macro [& body]
    `(let [name# {#'*a* :new}]
       (macrolet [(~(symbol 'with-my-macrolet) [& body#]
                   `(with-bindings ~name# ~...@body#))]
         ~...@body)))

  (my-macro (with-my-macrolet *a*))
  =>
  | user$eval__1980$eval__1982
  |  [Thrown class java.lang.InstantiationException]


Any ideas?

Thanks,
Tayssir


PS - For the curious, here's where I'm using this:
http://github.com/tjg/tjg-utils/blob/master/src/tjg-utils.clj#L92

-- 
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

Reply via email to