gpt4 book ai didi

clojure - clojure 中的lazy-seq 有什么意义?

转载 作者:行者123 更新时间:2023-12-02 20:01:06 26 4
gpt4 key购买 nike

我正在查看一些示例斐波那契序列 clojure 代码:

 (def fibs (lazy-cat [1 2] (map + fibs (rest fibs))))

我大致了解发生了什么,但不明白lazy-cat的要点。 我知道 lazy-cat 是一个宏,它会翻译成这样:

(def fibs (concat (lazy-seq [1 2]) (lazy-seq (map + fibs (rest fibs))))) 

lazy-seq 到底要完成什么?即使没有lazy-seq,它仍然会被延迟评估?这是否严格用于缓存目的?

编辑:感谢您的回答。我的困惑是,它与 REPL 中的普通 concat 一起工作,因为我之前在范围内绑定(bind)了 fibs。

最佳答案

不需要 [1 2] 上的 lazy-seq,但也没什么坏处。

(map + fibs (rest fibs)) 上的 lazy-seq 是必不可少的;如果没有它,函数调用将在 fibs 绑定(bind)到值之前进行评估,这将导致异常。通过将其包装在lazy-seq中,调用将被推迟,直到需要该值为止,并且fibs此时将有一个值。

关于clojure - clojure 中的lazy-seq 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2944650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com