On 19 February 2010 18:04, Julien <julien.c.chast...@gmail.com> wrote: > Question #1 > > I want to write a vararg function that does something like this: > > (map vector [1 2 3] [4 5 6]) > which yields > ([1 4] [2 5] [3 6]) > > I try to capture this as a function: > > (defn rotate[& x] (map vector x)) > > but > > (rotate [1 2 3] [4 5 6]) > > yields > > ([[1 2 3]] [[4 5 6]]) instead of ([1 4] [2 5] [3 6]) > > What am I doing wrong?
You want apply... clojure.core/apply ([f args* argseq]) Applies fn f to the argument list formed by prepending args to argseq. foo=> (defn rotate [& x] (apply map vector x)) #'foo/rotate foo=> (rotate [1 2 3] [4 5 6]) ([1 4] [2 5] [3 6]) > Question #2 > > Question #1 was somewhat of a diversion. What I actually want my > function to look like is something like this: > > (defn rotate[x] (map vector x)) > > where the x passed in is a vector of vectors e.g. [[4 2 3] [ 9 8 7]] > > so > > (rotate [[1 2 3] [4 5 6]]) > > would yield > > ([1 4] [2 5] [3 6]) > > How can I achieve this? same answer :) -- 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