小编Sid*_*ias的帖子

Clojure压扁和懒惰

不确定在构造延迟序列时使用flatten时我观察到的行为是什么.

查看clojure.core中的源代码,我可以看到flatten函数调用filter,因此应该返回一个惰性序列 - 我想.但是下面的代码片段给了我一个stackoverflow错误.在使用对concat的调用替换对flatten的调用的代码段中,它工作得很好

(defn l-f [c]
  (if (nil? c) []
    (lazy-seq  (flatten (cons  [[ :h :j] :a :B] (l-f (rest c))))))) 


    (take 10 (l-f (repeat 2))) is how I invoke it.
Run Code Online (Sandbox Code Playgroud)

这是一个相当人为的例子.我也知道flatten和concat会给我一些嵌套级别不同的序列.

我试图找出为什么flatten似乎打破了懒惰,即使我对clojure.core中的代码的(有限的)理解建议不然.

clojure lazy-evaluation flatten

2
推荐指数
1
解决办法
930
查看次数

标签 统计

clojure ×1

flatten ×1

lazy-evaluation ×1