2012-02-08 71 views
2

问题:我收集了一些向量或列表,希望找到一种可能与不均匀大小的向量求和的现有向量的常用方法。示出了设置 人为的例子:在Clojure中总结多个向量的习惯方式

=>(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进行的实验,所以它几乎可以肯定是我误解了函数迭代。

感谢

+0

又见REC:与map和递归求和ent [在Clojure中改变地图行为](http://stackoverflow.com/questions/9033678/changing-map-behaviour-in-clojure)在一般情况下处理带有“地图”和填充的问题。具有任意函数,列表数和填充元素)。 – 2012-02-09 14:17:42

回答

4

首先,它会列出是否对添加含有偶数长度的名单要容易得多,所以使用partition代替partition-all

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

然后你就可以做

(defn sum-lists [base-lists lists-to-add] 
    (reduce #(map + %1 %2) base-list lists-to-add)) 
+7

甚至更​​简单(应用地图+基地清单添加) – 2012-02-08 16:09:21

+0

@RomanBataev不错! – liwp 2012-02-08 17:35:58

+0

感谢liwp和@罗曼巴塔耶夫令人愉快的简单版本。 – jamiei 2012-02-08 23:16:46

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) 
+0

这对于不均匀大小的矢量无法正常工作。此外,您可以使用+而不是(fn [&args](apply + args)) – 2012-02-08 16:13:01