在Clojure中对多个向量求和的惯用法

时间:2012-02-08 14:54:07

标签: vector clojure iteration

问题:我有一组矢量或列表,我希望找到一种惯用的方法来对可能具有不均匀大小的矢量的现有矢量求和。 显示设置的示例:

=>(def collated-list [2 3 4 5 6 7 8])
=>(def lists-to-add (partition-all 3 collatedlist))
=>(def base-list [1 1 1])

我希望结果将细分的整理列表加到base-list上,例如,第一项是1 + 2 + 5 + 8,依此类推。

我尝试了什么:我尝试了几种不同的mapfor循环,但我似乎遇到了延迟排序或尝试将Integer添加到Vector的问题。

这是我在Clojure的第一次实验,所以几乎可以肯定我在这里误解了函数迭代。

由于

2 个答案:

答案 0 :(得分:4)

首先,如果要添加的列表包含偶数长度的列表,则会更容易,因此请使用partition代替partition-all

(def lists-to-add (partition 3 3 '(0 0) collated-list))

然后你可以用map和递归:

进行求和
(defn sum-lists [base-lists lists-to-add]
    (reduce #(map + %1 %2) base-list lists-to-add))

答案 1 :(得分:0)

; List of list
(def lst (partition 5 (range 200)))

; Base list
(def base [1 1 1 1 1])

; Sum operation
(apply map (fn [& args] (apply + args) ) base lst)