![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
(defn concat-inner-seqs "concat inner sequencies in sequence of tuples" [seq-of-seqs] (apply (partial map concat) seq-of-seqs)) (println (concat-inner-seqs [[[1] [2] [:a]] [[3] [4] [:b]] [[5] [6] [:c]]])) ; ((1 3 5) (2 4 6) (:a :b :c))А теперь вот это придется объяснить всем заинтересованным сотрудникам.
PS: Версия с мапами вместо туплов:
(defn concat-maps-seq "concat inner sequencies in sequence of maps" [seq-of-maps] (apply (partial merge-with concat) seq-of-maps)) (def test-data-maps [ {:F1 [1 "b" "3"] :F2 [2 'aa] :F3 [:a :e] :F4 [3333]} {:F1 [3] :F4 [4] :F6 [:b] :Pauk "abc"} {:F1 [5] :F3 [6] :F2 [:c] :Pauk "def"} ]) (println test-data-maps) (println (concat-maps-seq test-data-maps))
Сделана заменой map на merge-with. Можно использовать именованные поля и разное их количество.
no subject
Date: 2012-08-03 10:38 am (UTC)no subject
Date: 2012-08-03 01:35 pm (UTC)no subject
Date: 2012-08-03 11:00 am (UTC)no subject
Date: 2012-08-03 11:04 am (UTC)Только сегодня придумал как идиоматически обобщить это дело.
no subject
Date: 2012-08-03 11:10 am (UTC)no subject
Date: 2012-08-03 11:15 am (UTC)Т.е. структура данных тут не совсем матрица, а "последовательность туплов/мапов с последовательностями в качестве значений полей".
no subject
Date: 2012-08-03 11:21 am (UTC)(map concat [[1] [2] [:a]]
[[3] [4] [:b]]
[[5] [6] [:c]])
Даёт тот же результат, а в функции требует apply (partial *)
no subject
Date: 2012-08-03 11:27 am (UTC)Поэтому я использую (apply fn seq) а fn создаю с помощью частичного применения map concat
no subject
Date: 2012-08-03 11:31 am (UTC)no subject
Date: 2012-08-03 11:35 am (UTC)Вот если я найду целый класс функций типа map и merge-with и пойму, что в них общего и чем они мне будут полезны в опердени - тогда обобщу. Но частные реализации все равно оставлю - они нужны чаще всего.
no subject
Date: 2012-08-03 11:37 am (UTC)no subject
Date: 2012-08-03 11:38 am (UTC)Получается трэшатина типа коммон-лисповых caaaddddr
no subject
Date: 2012-08-03 11:42 am (UTC)(defn transpose [m] (apply (partial map list) m))
no subject
Date: 2012-08-03 11:50 am (UTC)интересненько. Значит общность с транспонированием действительно имеется.
no subject
Date: 2012-08-03 04:48 pm (UTC)no subject
Date: 2012-08-03 11:17 am (UTC)no subject
Date: 2012-08-03 11:19 am (UTC)no subject
Date: 2012-08-03 11:32 am (UTC)no subject
Date: 2012-08-03 11:36 am (UTC)no subject
Date: 2012-08-03 11:39 am (UTC)no subject
Date: 2012-08-03 11:43 am (UTC)no subject
Date: 2012-08-03 11:46 am (UTC)no subject
Date: 2012-08-03 11:48 am (UTC)no subject
Date: 2012-08-03 04:48 pm (UTC)no subject
Date: 2012-08-03 05:26 pm (UTC)Весной еще Хаскель и проект по нему были, тоже от лябмды.
no subject
Date: 2012-08-03 05:31 pm (UTC)no subject
Date: 2012-08-03 11:36 am (UTC)no subject
Date: 2012-08-03 01:07 pm (UTC)no subject
Date: 2012-08-03 12:20 pm (UTC)no subject
Date: 2012-08-03 12:27 pm (UTC)Транспонирование здесь совершенно логичное следствие зипования.
no subject
Date: 2012-08-03 12:58 pm (UTC)no subject
Date: 2012-08-03 01:06 pm (UTC)По-моему, это не хак, а идиоматически правильный способ.
no subject
Date: 2012-08-03 01:09 pm (UTC)no subject
Date: 2012-08-03 04:45 pm (UTC)no subject
Date: 2012-08-03 04:50 pm (UTC)Осталось заставить прочесть :)
no subject
Date: 2012-08-03 04:51 pm (UTC)no subject
Date: 2012-08-04 07:00 am (UTC)no subject
Date: 2012-08-04 07:20 am (UTC)no subject
Date: 2012-08-04 07:22 am (UTC)