Hi again, Am 05.06.2009 um 00:06 schrieb Meikel Brandmeyer:
The docstring is a bit contorted but I'm too sleepy now, to get that right...
And of course I'm too sleepy to miss the keyword to symbol conversion.... (defmacro defnk"Define a function accepting keyword arguments. Symbols up to the first keyword in the parameter list are taken as positional arguments. Then an alternating sequence of keywords and defaults values is expected. The
values of the keyword arguments are available in the function body byvirtue of the symbol corresponding to the keyword (cf. :keys destructuring). defnk accepts an optional docstring as well as an optional metadata map."
[fn-name & fn-tail] (let [[fn-name [args & body]] (name-with-attributes fn-name fn-tail) [pos kw-vals] (split-with symbol? args)syms (map #(-> % name symbol) (take-nth 2 kw-vals))
values (take-nth 2 (rest kw-vals))sym-vals (apply hash-map (interleave syms values))
de-map {:keys (vec syms) :or sym-vals}] `(defn ~fn-name [...@pos & options#] (let [~de-map (apply hash-map options#)] ~...@body)))) Sincerely Meikel
smime.p7s
Description: S/MIME cryptographic signature