我无法理解如何在Clojure中创建一个懒惰的序列.
宏的文档对我来说一点也不清楚:
用法:(lazy-seq&body)获取一个返回ISeq或nil的表达式体,并生成一个Seqable对象,该对象仅在第一次调用seq时调用body,并将缓存结果并在随后的所有内容中返回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)))
)
Run Code Online (Sandbox Code Playgroud)
所以,我没有得到的第一件事是,因为lazy-seq不在调用conj之外,它是如何阻止conj在评估时生成无限序列的?
我的第二个问题是,懒惰的序列定义总是采用这种一般形式吗?