Clojure - 将函数应用于向量向量

rbb*_*rbb 5 clojure

我有一个矢量[[[1 2] [3 4]] [[5 6] [7 8]] [9 10] 11].我想将一个函数应用于此向量,但保留数据结构.

例如,我想为每个数字添加1,但保留数据结构以获得结果[[[2 3] [4 5]] [[6 7] [8 9]] [10 11] 12].这可能吗?

我试过了

(map #(+ 1 %) (flatten [[[1 2] [3 4]] [[5 6] [7 8]] [9 10] 11]))
=> (2 3 4 5 6 7 8 9 10 11 12)
Run Code Online (Sandbox Code Playgroud)

但是你可以看到数据结构不一样.

有没有可能,需要一个函数(2 3 4 5 6 7 8 9 10 11 12)[[[2 3] [4 5]] [[6 7] [8 9]] [10 11] 12]

我想也许可以使用postwalk,但我不确定这是否正确.

任何帮助将非常感激

Lee*_*Lee 6

你可以使用postwalk:

(require '[clojure.walk :as walk])

(let [t [[[1 2] [3 4]] [[5 6] [7 8]] [9 10] 11]]
  (walk/postwalk (fn [x] (if (number? x) (inc x) x)) t))
Run Code Online (Sandbox Code Playgroud)