Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在clojure中交换深度嵌套向量中的所有元素对?_Clojure_Clojurescript - Fatal编程技术网

如何在clojure中交换深度嵌套向量中的所有元素对?

如何在clojure中交换深度嵌套向量中的所有元素对?,clojure,clojurescript,Clojure,Clojurescript,比如说我有 [[[[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 (

比如说我有

[[[[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))

您可能会提出不同的
对?
谓词,更适合您的域。

您是如何解决这个问题的?当你说“最里面的”时,在这种情况下,你似乎是指所有的。也许更多的测试用例会有所帮助?到目前为止你试过什么?