2
Я хочу написать общую функцию, чтобы добавить векторов:Clojure: функция VARIADIC для сложения векторов
С картой я могу сделать следующее:
(vec (map + [1 2] [1 2] [1 2]))
⇒ [3 6]
(vec (map + [1 2 3] [1 2 3] [1 2 3]))
⇒ [3 6 9]
Я хотел бы быть в состоянии обернуть его в функцию, которая принимает любое число векторов. В настоящее время я версия, которая работает с использованием системы & повторялись:
(defn add-coords [& args]
(loop [coords (first args) more (rest args)]
(if (empty? more)
(vec coords)
(recur (map + coords (first more))
(rest more)))))
(add-coords [1 2] [1 2] [1 2])
⇒ [3 6]
(add-coords [1 2 3] [1 2 3] [1 2 3])
⇒ [3 6 9]
Есть ли способ сделать это в одной строке? Что-то вроде:
(defn add-coords [& args] (vec (map + args)))
Спасибо. Это красивый код. – user619882