通常,我执行序列操作,我总是使用doall
来实现它们。因此,我想知道具有惰性序列的实际用途是什么?
我在网上看到的所有使用延迟序列的示例都是用于seq的构建-(取5(范围))-该代码也可能被重写为-(范围5)-我的意思是,所有seq生成都可以即使没有延迟序列也可以完成,那么他们的实际需求是什么?
我仅看到了用于生成数字序列的惰性序列的示例,还有其他应用程序吗?
答案 0 :(得分:2)
他们按需产生结果,并在必要时可以停止产生。 这样就可以实现无限序列,并行处理,合并操作以及避免临时存储(可以通过使用换能器进一步优化)之类的功能
最后的懒惰使得轻松将递归算法转换为序列(使用lazy-seq
)
答案 1 :(得分:2)
可以在tentacles library中找到一个懒惰的seq示例(尽管我不确定它是否很棒)。
Eric Normand还展示了reading pages of data from a database的示例,该示例利用了惰性序列,因此客户端仅获取他们真正需要的页面。
作为旁注:《 Programming Clojure》(第3版,第85页)提到了以下使用延迟序列的准则: