Clojure:增加列表中每个向量的第一个元素

fun*_*fox 2 vector clojure

我有一个像这样的向量列表:

([4 0] [4 2] [2 1] [4 1])
Run Code Online (Sandbox Code Playgroud)

如何将每个向量的第一个元素增加某个值 X ?

所需的输出:

([5 0] [5 2] [3 1] [5 1])
Run Code Online (Sandbox Code Playgroud)

这是我目前的方法,但我认为我可以简单得多:

(defn shiftVector [oldVector number]
   (map vector
      (map #(+ (first %) number) oldVector )
      (map  #(second %) oldVector))
)
Run Code Online (Sandbox Code Playgroud)

Sea*_*eld 13

由于向量与其索引相关联,因此最简单的方法可能是:

(defn shift-vector [v n]
  (map #(update % 0 + n) v))

(shift-vector [[4 0] [4 2] [2 1] [4 1]] 1)
;=> ([5 0] [5 2] [3 1] [5 1])
Run Code Online (Sandbox Code Playgroud)

这适用于列表中的任何长度向量(空向量除外,但无论如何您都无法增加它们)。