Clojure 反向展平列表。例如。 '(1 2 3 4 5 6) to ' ((1 2) (3 4) (5 6)

标签 clojure

是否有核心功能或某种惯用的方法来对集合进行“反向扁平化”? 例如。我想要以下内容:

(by-two '(1 2 3 4 5 6)) ; evals to '( (1 2) (3 4) (5 6) )

当然,上述情况下的表单需要偶数个元素,或者如果提供奇数个集合,则该函数应该执行一些明智的操作。当然,通用的by-n函数会更好。我不清楚尝试深入概括这个概念是否有任何优点,或者最好的形式是什么:

(by [2 2] '(1 2 3 4 5 6 7 8)) ; evals to '( ( (1 2) (3 4) ) ( (5 6) (7 8) ) )
(by [3 2 1 1 1] '(1 2 3 4 5 6)) ; evals to '(((((1 2 3) (4 5 6)))))

最佳答案

您可以使用reducepartition:

(reduce #(partition %2 %1) '(1 2 3 4 5 6 7 8) [2 2])

关于Clojure 反向展平列表。例如。 '(1 2 3 4 5 6) to ' ((1 2) (3 4) (5 6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15427226/

相关文章:

clojure - 黑巢路线

java - 将序言应用程序转换为基于 JVM 的语言?

logging - 带有 logback 的 clj-http 日志记录

java - clojure-contrib.jar 导入错误

clojure - lein repl 中的错误(需要帮助调试 jvm stacktrace)

clojure - 如何使用lein管理一个依赖的依赖?

clojure - 如何重复 Clojure REPL 中的最后一行?

jquery - 如何使用 Om/Clojurescript(来自 jQuery)在 React 中实现基本动画?

javascript - 在 clojure 中运行 D3.js

sql - SQL 模式到 Korma 实体的代码生成工具