A very basic version that works:
(defmacro defmatch [name & patterns]
(let [bindings (take (count (first patterns))
(repeatedly #(gensym "ocr-")))]
`(defn ~name [~@bindings]
(match [~@bindings]
~@patterns))))
A bit more work is required to make this idiomatic w/ Clojure's conventions
around multiple arity fns.
Predicate dispatch will make this macro unnecessary and I'd rather focus on
that.
David
On Sun, Oct 2, 2011 at 10:31 PM, Alex Baranosky <
[email protected]> wrote:
> Playing with it I've come up with this code which Clojure barfs on:
>
> (defn- n-gensyms [n]
> (take n (repeatedly gensym)))
>
>
> (defmacro defmatch [name & patterns]
> (let [bindings# ~(n-gensyms (count (first (patterns))))]
> `(defn ~name bindings#
> (match bindings#)
> ~@patterns)))
>
> I'm admittedly terrible at macros so be easy on me :)
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to [email protected]
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en