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
Clojure,concat将多个序列合并为一个序列_Clojure - Fatal编程技术网

Clojure,concat将多个序列合并为一个序列

Clojure,concat将多个序列合并为一个序列,clojure,Clojure,下一行:(重复4[23]) 告诉我:([23][23][23][23]) 如何从上面的向量列表中创建一个向量或列表,以便获得此结果?:[2 3 2 3 2 3] 谢谢concat实际上正是您想要的功能 user> (apply concat (repeat 4 [2 3])) (2 3 2 3 2 3 2 3) 这甚至适用于惰性输入: user> (take 8 (apply concat (repeat [2 3]))) (2 3 2 3 2 3 2 3) 这是另一种选择: u

下一行:
(重复4[23])

告诉我:
([23][23][23][23])

如何从上面的向量列表中创建一个向量或列表,以便获得此结果?:
[2 3 2 3 2 3]


谢谢

concat实际上正是您想要的功能

user> (apply concat (repeat 4 [2 3]))
(2 3 2 3 2 3 2 3)
这甚至适用于惰性输入:

user> (take 8 (apply concat (repeat [2 3])))
(2 3 2 3 2 3 2 3)
这是另一种选择:

user> (def flatten-1 (partial mapcat identity))
#'user/flatten-1
user> (flatten-1 (repeat 4 [2 3]))
(2 3 2 3 2 3 2 3)
它与惰性兼容,与“展平”不同,它保留了任何子结构(仅执行一级展平)


获取顺序事物的任何嵌套组合(列表、, 向量等),并将其内容作为单一的平面序列返回。
(展平零)返回零


学究般地说,你要求一个向量,所以:

(->> [2 3] cycle (take 8) vec)

我觉得cycle比concat更合适一点(尽管它使用concat本身),因为它表示“循环通过这个序列的元素”,而不是“将下面的序列连接在一起”。只是我的意见而已。

扁平化的问题在于它通常过于激进,一旦你想保留序列中的任何子序列,它就不再有用了。通常使用展平表示您应该以不同的方式生成数据(即mapcat而不是map,cons而不是list)。
(flatten (repeat 4 [2 3]))  ;(2 3 2 3 2 3 2 3)
(take 8 (cycle [2 3]))
;; => (2 3 2 3 2 3 2 3)
(->> [2 3] cycle (take 8) vec)