フィボナッチ数列の 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
、スコープ内の fibs への以前のバインディングがあったため、REPL のプレーンで機能したことでした。