问题:我有一组矢量或列表,我希望找到一种惯用的方法来对可能具有不均匀大小的矢量的现有矢量求和。 显示设置的示例:
=>(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
,依此类推。
我尝试了什么:我尝试了几种不同的map
和for
循环,但我似乎遇到了延迟排序或尝试将Integer
添加到Vector
的问题。
这是我在Clojure的第一次实验,所以几乎可以肯定我在这里误解了函数迭代。
由于
答案 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)