【问题标题】:Clojure: Variadic function for vector additionClojure:向量加法的可变参数函数
【发布时间】:2015-04-20 14:54:44
【问题描述】:

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

使用地图我可以做到以下几点:

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

【问题讨论】:

    标签: clojure variadic


    【解决方案1】:

    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]
    

    【讨论】:

      猜你喜欢
      • 2013-02-22
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多