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

标签 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 (vector? s)
       (every? (complement vector?) s)
       (= (count s) 2)))

(defn swap-pairs [s]
  (walk/prewalk #(if (pair? %)
                   (vec (reverse %))
                   %)
                s))

您可能想出更适合您领域的不同pair?谓词。

关于clojure - 如何在 clojure 中交换深层嵌套向量中的所有元素对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37492289/

相关文章:

clojure - 如何将 map 转换为 Clojure/Compojure/Ring 中的 URL 查询字符串?

http - 通过 cljs-http 的 ClojureScript 多部分发布?

clojurescript 找不到 cljs.core.async.macros

clojurescript - 如何在clojurescript中获取查询参数?

clojurescript - Om 如何渲染列表对象?

clojure - 在 Clojure REPL 中使用导入的 Java 库

clojure - ClojureScript 中的 getElementsByClassName?

clojure - 如何使用 Elasticisch 维护与不同 ElasticSearch 主机的两个连接?

macros - 为什么要尽可能多地删除宏?

clojure - 使用重新框架实现登录系统