我正在查看一些示例斐波那契序列 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
?这是否严格用于缓存目的?
编辑:感谢您的回答。我的困惑是它可以与concat
REPL 中的普通文本一起使用,因为我之前在范围内绑定了 fibs。