首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure反向平坦列表。例如“(1 2 3 4 5 6)至”(1 2) (3 4) (5 6)

Clojure反向平坦列表。例如“(1 2 3 4 5 6)至”(1 2) (3 4) (5 6)
EN

Stack Overflow用户
提问于 2013-03-15 07:50:22
回答 3查看 292关注 0票数 3

是否有一个核心功能或一些惯用的方式来做一个“反向扁平”的集合?我想要以下几点:

代码语言:javascript
复制
(by-two '(1 2 3 4 5 6)) ; evals to '( (1 2) (3 4) (5 6) )

当然,在上述情况下,表单需要偶数的元素,或者函数应该做一些明智的事情,如果有奇数集合的话。当然,广义by-n函数会更好。我不清楚尝试深入推广这一概念是否有任何好处,也不清楚这样做的最佳形式是什么:

代码语言:javascript
复制
(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)))))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-15 09:09:20

您可以使用reducepartition

代码语言:javascript
复制
(reduce #(partition %2 %1) '(1 2 3 4 5 6 7 8) [2 2])
票数 7
EN

Stack Overflow用户

发布于 2013-03-15 08:00:39

partition

代码语言:javascript
复制
(partition 2 [1 2 3 4 5])
> ((1 2) (3 4))

如果你想包括小尾巴,就有partition-all

代码语言:javascript
复制
 (partition-all 2 [1 2 3 4 5])
 > ((1 2) (3 4) (5))
票数 2
EN

Stack Overflow用户

发布于 2013-03-15 08:02:18

我不知道这样的标准功能。但是隔断是有帮助的:

代码语言:javascript
复制
(defn by [sizes coll]
  (if sizes
    (by (next sizes) (partition (first sizes) coll))
    coll))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15427226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档