是否有核心功能或一些惯用的方式来对集合进行"反向展平"?我想要以下内容:
(by-two '(1 2 3 4 5 6)) ; evals to '( (1 2) (3 4) (5 6) )
Run Code Online (Sandbox Code Playgroud)
当然,上述情况下的形式需要偶数个元素,或者如果出现奇数编号的集合,函数应该做一些合理的事情.当然,广义的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)))))
Run Code Online (Sandbox Code Playgroud)
你可以使用reduce和partition:
(reduce #(partition %2 %1) '(1 2 3 4 5 6 7 8) [2 2])
Run Code Online (Sandbox Code Playgroud)