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 如何将列表展平并懒洋洋地压缩_Clojure_Lazy Sequences - Fatal编程技术网

Clojure 如何将列表展平并懒洋洋地压缩

Clojure 如何将列表展平并懒洋洋地压缩,clojure,lazy-sequences,Clojure,Lazy Sequences,我在玩弄懒惰的列表,似乎无法弄清楚这一点。 我想我可以通过把它写成一个大的递归函数来解决我的问题,它可以完成所有必要的工作,但是我想把它写成更简单的函数 我将尝试写一个简单的例子,可以很容易地解释我的问题: (defn numbers ([] (numbers 1)) ([n] (cons n (lazy-seq (numbers (inc n)))))) (defn repeat-n [n] (take n (repeat n))) 我们有两个函数。返回一个惰性的数字序列。另

我在玩弄懒惰的列表,似乎无法弄清楚这一点。 我想我可以通过把它写成一个大的递归函数来解决我的问题,它可以完成所有必要的工作,但是我想把它写成更简单的函数

我将尝试写一个简单的例子,可以很容易地解释我的问题:

(defn numbers 
  ([] (numbers 1))
  ([n] (cons n (lazy-seq (numbers (inc n))))))

(defn repeat-n [n]
  (take n (repeat n)))
我们有两个函数。返回一个惰性的数字序列。另一个返回其number参数n次(希望它也是懒惰的;如果不是,那么编写一个这样的参数似乎很容易)

我想将repeat-n映射到数字,以便返回结果的惰性序列。我已经使用了
lazy-seq
lazy-cat
concat
和递归函数,但仍然存在一些问题

函数应该是这样的

(lazy-concat-map [f items] ...)
以及(希望)打电话的结果

(take 11 (lazy-concat-map repeat-n numbers)) 
会是

12233344445
有什么想法吗

(take 11 (mapcat #(repeat % %) (range)))
;=> (1 2 2 3 3 3 4 4 4 4 5)
函数
map
concat
(和组合
mapcat
),以及
repeat
range
都是惰性的

列表理解,对于,也是懒惰的

(take 11 (apply concat (for [x (range)] (repeat x x))))
;=> (1 2 2 3 3 3 4 4 4 4 5)
函数
map
concat
(和组合
mapcat
),以及
repeat
range
都是惰性的

列表理解,对于,也是懒惰的

(take 11 (apply concat (for [x (range)] (repeat x x))))
;=> (1 2 2 3 3 3 4 4 4 4 5)

注意,
for
可以帮助摆脱
应用concat
(对于[x(范围)n(重复x x)]n)
。注意,
for
可以帮助摆脱
应用concat
(对于[x(范围)n(重复x x)]n)