我正在查看一些Fibonacci序列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
可以正常工作,因为我之前对fibs进行了绑定。