Hi, Am 26.05.2009 um 20:47 schrieb kyle smith:
Ahh, of course. I've actually learned that trick before. Thanks.
There is also the mega-hacky quasiquote macro:
(defn- self-eval?
[thing]
(or (keyword? thing)
(number? thing)
(instance? Character thing)
(string? thing)
(nil? thing)))
(defn- flatten-map
[the-map]
(reduce (fn [result entry] (-> result
(conj (key entry))
(conj (val entry))))
[] the-map))
(defn- unquote?
[form]
(and (seq? form) (= (first form) `unquote)))
(defn- quasiquote*
[form]
(cond
(self-eval? form) form
(unquote? form) (second form)
(symbol? form) (list 'quote form)
(vector? form) (vec (map quasiquote* form))
(map? form) (apply hash-map (map quasiquote* (flatten-map
form)))
(set? form) (apply hash-set (map quasiquote* form))
(seq? form) (list* `list (map quasiquote* form))
:else (list 'quote form)))
(defmacro quasiquote
[form]
(quasiquote* form))
So (let [x 5] (quasiquote (+ ~x 6))) will result in (+ 5 6).
Sincerely
Meikel
smime.p7s
Description: S/MIME cryptographic signature
