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 <
alexander.barano...@gmail.com> 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 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
>

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