Hi, Am 08.02.2009 um 00:40 schrieb samppi:
(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))))))) (defmacro conc [& subrules] `(fn [tokens#] (conc* tokens# ~...@subrules))) I had another function called factor=: (defn factor= [factor subrule] (apply conc (replicate factor arg))) When I changed conc to a macro, factor= didn't work anymore. Is there no way of fixing factor=?
Why don't you call conc* directly? (defn factor= [factor subrule] (fn [tokens] (apply conc* tokens (replicate factor subrule)))) That's another nice example why to pack as much as possible into a function, which is then called by the expanded macro code. Sincerely Meikel
smime.p7s
Description: S/MIME cryptographic signature