Clojure - 在向量中添加数字对

时间:2017-06-04 13:57:52

标签: clojure

我有一个向量[1 2 3 4]。有没有办法添加每一对来获得[(+ 1 2) (+ 2 3) (+ 3 4)]

我试过

(loop [x 0] 
  (when (< x (count y)) 
    (+ (nth y x) (nth y (+ 1 x))) 
    (recur (+ x 1))))

但是我得到了一个超出范围的错误IndexOutOfBoundsException clojure.lang.PersistentVector.arrayFor (PersistentVector.java:158)

3 个答案:

答案 0 :(得分:5)

(fn [xs]
  (map + xs (rest xs)))

答案 1 :(得分:3)

这是一种方式:

(->> [1 2 3 4]
     (partition 2 1)
     (mapv (partial reduce +)))
;;=> [3 5 7]

我看到的主要问题是你所采用的方法是loop recur形式没有累加器。另一个问题是您使用的是when而不是if

答案 2 :(得分:2)

这是一个解构示例:

(->> [1 2 3 4]
     (partition 2 1)
     (mapv (fn [[f s]] (+ f s))))