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]
我想写一个通用函数来添加向量:
有了地图我可以做以下事情:
(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]