I have a number of fairly nasty functions with a form that looks like this:
(defn default-ontology ([f] (dispatch f)) ([f a] (dispatch f a)) ([f a b] (dispatch f a b)) ([f a b c] (dispatch f a b c)) ([f a b c d] (dispatch f a b c d)) ([f a b c d e] (dispatch f a b c d e)) ([f a b c d e fa] (dispatch f a b c d e fa)) ([f a b c d e fa g] (dispatch f a b c d e fa g)) ([f a b c d e fa g h] (dispatch f a b c d e fa g h)) ([f a b c d e fa g h i] (dispatch f a b c d e fa g h i)) ([f a b c d e fa g h i j] (dispatch f a b c d e fa g h i j))) The reason for all of this is that I need to avoid the use of variadic function calls for performance reasons -- this function gets called a lot in my code base, and without this unwinding, I box and unbox consistantly. Now, I dislike the code repetition here, and indeed have found already found one bug in my code where I missed a variable out, something like.... ([f a b c d] (dispatch f a b d)) which is hard to pick up on. I can't make the whole thing a macro because I need to pass this as a first class function. And I can't macro each of the variadic elements since the I'd need to return two elements at once. The best I have done up with so far is: (defn ^:private form-with-arity[n] ;; left as an exercise for the reader ) (defmacro ^:private m-default-ontology `(defn default-ontology ~@(map form-with-arity (range 1 10)))) (m-default-ontology) Or am I missing something more obvious? Phil -- 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 unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.