Clojure:矢量加法的变量函数

时间:2015-04-20 14:54:44

标签: 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]

我希望能够把它包装成一个带有任意数量向量的函数。目前我有一个使用loop& amp;复发:

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

1 个答案:

答案 0 :(得分:3)

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]