функция unzip принимает m элементов по n элементов в каждом и возвращает n элементов по m элементов в каждом, например
(def pairs [[1 2] [3 4] [5 6]])
(unzip pairs) => [[1 3 5] [2 4 6]]
В идеале ищите что-то, что работает для произвольного количества элементов.





Довольно уродливое решение, которое я придумал для двух разархивированных последовательностей:
(defn- reducer-fn [{:keys [firsts seconds]} [f s]]
{:firsts (conj firsts f)
:seconds (conj seconds s) })
(defn- split2 [{:keys [firsts seconds]}]
[[firsts seconds]])
(defn unzip2 [input]
(->> input
(reduce reducer-fn {:firsts [] :seconds []})
split2))
Макрос for весьма полезен для таких вещей:
(defn unzip [input]
(for [iter (iterate (partial map rest) input)
:while (every? seq iter)]
(map first iter)))
Технически это возвращает списки вместо векторов, но в остальном приятно.