Как мы должны знать, Clojure map
может быть применен к последовательности:
(map #(* %1 %1) [1 2 3]) ; (1)
.. или к нескольким, таким образом:
(map vector [0 1] [2 1]) ; (2)
;=> ([0 2] [1 1])
ТеперьЯ хочу получить тот же результат, что и (2), но у меня есть аргументы, хранящиеся в последовательности.Другими словами, следующее не дает желаемого результата:
(map vector [[0 1] [2 1]]) ; (3)
;=> ([[0 1]] [[2 1]])
Итак, я написал этот простой макрос, где umap означает "unsplice map":
(defmacro umap [fun args-list]
"umap stands for unspliced map.
Let args-list be a list of args [a1 a2 ... an].
umap is the same of (map fun a1 a2 .. an)"
`(map ~fun ~@args-list))
Очевидно,это работает как шарм:
(umap vector [[0 1] [2 1]]) ; (4)
;=> ([0 2] [1 1])
Так вот мой вопрос: я изобретаю колесо?Есть ли другой способ сделать так же, как (4)?
Пока и спасибо заранее,
Альфредо