如何在 clojure 中交换深层嵌套向量中的所有元素对?
how to swap all pair of elements in deeply nested vector in clojure?
说我有类似的东西
[[[[1 2] [3 4] [5 6]]] [[[7 8] [9 10]]] [[[2 4]]]]
我想交换最里面的一对来制作它
[[[[2 1] [4 3] [6 5]]] [[[8 7] [10 9]]] [[[4 2]]]]
假设我在获取数据之前不知道深度,并且所有对都处于相同的深度级别。
实现此目的的惯用方法是什么?
clojure.walk
将完成工作:
(require '[clojure.walk :as walk])
(defn pair? [s]
(and (vector? s)
(every? (complement vector?) s)
(= (count s) 2)))
(defn swap-pairs [s]
(walk/prewalk #(if (pair? %)
(vec (reverse %))
%)
s))
您可能想出更适合您领域的不同 pair?
谓词。
说我有类似的东西
[[[[1 2] [3 4] [5 6]]] [[[7 8] [9 10]]] [[[2 4]]]]
我想交换最里面的一对来制作它
[[[[2 1] [4 3] [6 5]]] [[[8 7] [10 9]]] [[[4 2]]]]
假设我在获取数据之前不知道深度,并且所有对都处于相同的深度级别。
实现此目的的惯用方法是什么?
clojure.walk
将完成工作:
(require '[clojure.walk :as walk])
(defn pair? [s]
(and (vector? s)
(every? (complement vector?) s)
(= (count s) 2)))
(defn swap-pairs [s]
(walk/prewalk #(if (pair? %)
(vec (reverse %))
%)
s))
您可能想出更适合您领域的不同 pair?
谓词。