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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/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反向展平列表。例如';(123456)至';( (1 2) (3 4) (5 6)_Clojure - Fatal编程技术网

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

Clojure反向展平列表。例如';(123456)至';( (1 2) (3 4) (5 6),clojure,Clojure,是否有一个核心功能或某种惯用方法来对集合进行“反向展平”? 例如,我想要以下内容: (by-two '(1 2 3 4 5 6)) ; evals to '( (1 2) (3 4) (5 6) ) 当然,上述情况下的形式需要偶数个元素,或者如果呈现奇数集合,函数应该做一些合理的事情。当然,广义的by-n函数会更好。我不清楚尝试深入概括概念是否有任何好处,或者最好的形式是什么o这样做: (by [2 2] '(1 2 3 4 5 6 7 8)) ; evals to '( ( (1 2) (3

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

(by-two '(1 2 3 4 5 6)) ; evals to '( (1 2) (3 4) (5 6) )
当然,上述情况下的形式需要偶数个元素,或者如果呈现奇数集合,函数应该做一些合理的事情。当然,广义的by-n函数会更好。我不清楚尝试深入概括概念是否有任何好处,或者最好的形式是什么o这样做:

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

分区

(partition 2 [1 2 3 4 5])
> ((1 2) (3 4))
如果要包括小尾,则有
分区all

 (partition-all 2 [1 2 3 4 5])
 > ((1 2) (3 4) (5))

据我所知,没有这样的标准功能。但有帮助:

(defn by [sizes coll]
  (if sizes
    (by (next sizes) (partition (first sizes) coll))
    coll))

您可以使用
reduce
partition

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