我不太理解如何在Clojure中创建一个lazy sequence。
这个宏的文档对我来说一点都不清楚:
用法:(lazy-seq & body) 接收一系列返回ISeq或nil的表达式,并产生一个Seqable对象,只有在第一次调用seq时才会执行这些表达式,将结果缓存并在随后的所有 seq调用中返回。
我看到的所有例子,似乎都做了类似以下的事情:
; return everything in the sequence starting at idx n
(defn myseq-after-n [n]
(...)
)
(def my-lazy-seq
(lazy-seq (conj [init-value] (myseq-after-n 2)))
)
所以,我不理解的第一件事是,既然lazy-seq在conj调用外部,它如何防止在评估时生成无限序列?
我的第二个问题是,懒惰序列定义是否总是采用这个一般形式?