Я просматриваю пример кода замыкания последовательности Фибоначчи:
(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 в области действия.