Perfect. This is exactly what I need. Thank you. :)

I wonder, is it customary to append an * to the names of functions
that do the grunt work of corresponding macros?

On Feb 6, 10:03 am, Christophe Grand <christo...@cgrand.net> wrote:
> samppi a écrit :
>
> > Thanks for the reply. I've tried delays, but it seemed to make my
> > functions much slower. I think I'm going to go with var-quoting—it
> > seems to be the least intrusive option, and it definitely works. My
> > nightmare is finally over. :)
>
> > I wonder if there's a way to make a macro make even this unneeded for
> > the end-user, though.
>
> Yup, elaborating on my third option:
>
> (defn conc* [tokens & subrules]
>   (loop [subrule-queue (seq subrules), remaining-tokens (seq tokens),
> products []]
>     (if (nil? subrule-queue)
>       [products remaining-tokens]
>       (let [[subrule-products subrule-remainder :as subrule-result]
>             ((first subrule-queue) remaining-tokens)]
>         (when-not (nil? subrule-result)
>           (recur (rest subrule-queue) subrule-remainder
>                  (conj products subrule-products)))))))
>
> (defn alt* [tokens & subrules]
>   (some #(% tokens) subrules))
>
> (defmacro conc [& subrules]
>   `(fn [tokens#]
>      (conc* tokens# ~...@subrules)))
>
> (defmacro alt [& subrules]
>   `(fn [tokens#]
>      (alt* tokens# ~...@subrules)))
>
> (declare value)
> (def array (conc array-start value array-sep value array-end))
> (def value (alt array bit))
>
> Christophe
--~--~---------~--~----~------------~-------~--~----~
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
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