Clojure:向量加法的可变参数函数

Clojure: Variadic function for vector addition

我想写一个通用函数来添加向量:

有了地图我可以做以下事情:

(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)))

apply mapv 应该有帮助:

user=> (defn add-coords [& args] 
         (when (seq args) 
           (apply mapv + args)))

在行动

user=> (add-coords [1 2 3] [1 2 3] [1 2 3])
[3 6 9]