When clojure evaluates a piece of code it goes through several steps. First the reader takes the string representation of your code and turns it into the clojure data structures represented by your code. Those data structures are then sent to the compiler for compilation, including possible macro expansion.
Your code contains {~@(mapcat (fn [x] (list (keyword x) x)) args)} in it. The {} characters instruct the reader that this is a literal map. The reader expects a literal map to have an even number of elements, which your code does not have. It has one element. Therefore the reader throws an out of bounds exception. The exception is being thrown by the reader (the bit that takes a string and turns it into clojure datastructures) BEFORE it ever gets to the point where it is trying to do a macro expansion. Note that {:a} by itself also throws an ArrayIndexOutOfBounds exception. K. -- 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