相关疑难解决方法(0)

Clojure懒惰序列使用

我无法理解如何在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在评估时生成无限序列的?

我的第二个问题是,懒惰的序列定义总是采用这种一般形式吗?

functional-programming clojure lazy-evaluation

42
推荐指数
1
解决办法
1万
查看次数