Clojure:增加列表中每个向量的第一个元素
我有一个像这样的向量列表:
([4 0] [4 2] [2 1] [4 1])
如何将每个向量的第一个元素增加某个值 X ?
所需的输出:
([5 0] [5 2] [3 1] [5 1])
这是我目前的方法,但我认为我可以简单得多:
(defn shiftVector [oldVector number]
(map vector
(map #(+ (first %) number) oldVector )
(map #(second %) oldVector))
)
回答
由于向量与其索引相关联,因此最简单的方法可能是:
(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])
这适用于列表中的任何长度向量(空向量除外,但无论如何您都无法增加它们)。