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

标签 clojure variadic

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

使用 map 我可以执行以下操作:

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

最佳答案

应用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]

关于Clojure:向量加法的可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29751309/

相关文章:

clojure - 使用有限域声明降序/升序坐标的谓词

clojure - 我可以只在 Java 类上使用 Clojure 多方法吗?

hadoop - Clojure Hadoop - 5 行 Cascalog 相当于 300 行 PIG?

C 错误 : expected ';' , ',' 或 ')' 在 '...' token 之前

c - 使用可变长度参数列表查找函数参数中的重复字符

unit-testing - 在单元测试中捕获异常

java - 与 python psycopg2 相比,使用 clojure jdbc 将文件记录插入 postgres db 需要很长时间

c++ - 迭代 C++ 可变参数模板

c - 在可变参数函数的包装器中中继可选参数

C++ 可变参数模板