【发布时间】:2013-05-24 22:28:55
【问题描述】:
我正在玩懒惰的列表,但似乎无法弄清楚这一点。 我想我可以通过把它写成一个大型递归函数来解决我的问题,它可以完成所有必要的工作,但我想用更简单的函数来组合它。
我会尝试写一个简单的例子,可以很容易地转化为我的问题:
(defn numbers
([] (numbers 1))
([n] (cons n (lazy-seq (numbers (inc n))))))
(defn repeat-n [n]
(take n (repeat n)))
所以,我们有两个功能。一个返回一个惰性数字序列。另一个返回它的数字参数 n 次(希望它也很懒惰;如果不是这样,写一个似乎很容易)。
我想将repeat-n 映射到数字,以便返回延迟的结果序列。我已经玩过lazy-seq、lazy-cat、concat 和递归函数,但我仍然遇到问题。
函数应该是这样的
(lazy-concat-map [f items] ...)
以及(希望)调用的结果
(take 11 (lazy-concat-map repeat-n numbers))
应该是
12233344445
有什么想法吗?
【问题讨论】: