Hi, Am 23.12.2008 um 17:08 schrieb Rich Hickey:
SVN 1184 implements this. Feedback welcome on its utility for macro writers.
Many Thanks Rich! Here is a half-baked quasiquote macro ripped out of the syntax-quote reader: (defmacro quasiquote [form] (let [unquote? (fn [f] (and (seq? f) (= (first f) `unquote))) self-eval? (fn [f] (or (keyword? f) (number? f) (instance? Character f) (string? f))) flatten-map (fn [m] (reduce (fn [r e](-> r (conj (key e)) (conj (val e))))
[] m)) qq (fn qq [form] (cond (self-eval? form) form (unquote? form) (second form) (symbol? form) (list 'quote form) (vector? form) (vec (map qq form)) (map? form) (apply hash-map(map qq (flatten-map form))) (set? form) (apply hash-set (map qq form))
(seq? form) (list* `list (map qq form)) :else (list 'quote form)))] (qq form))) With some example application: Gorilla=> (def abc 5) #'user/abc Gorilla=> (let [fgh 6] (quasiquote (+ ~abc ~(+ abc fgh) xyz))) (+ 5 11 xyz) Sincerely Meikel
smime.p7s
Description: S/MIME cryptographic signature