【发布时间】:2011-06-26 21:52:08
【问题描述】:
我无法理解如何在 Clojure 中创建惰性序列。
我对宏的文档一无所知:
用法:(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 的调用之外,它如何防止 conj 在评估时生成无限序列?
我的第二个问题是,惰性序列定义总是采用这种一般形式吗?
【问题讨论】:
标签: clojure functional-programming lazy-evaluation