Я пытаюсь проработать книгу Стюарта Хэллоуэя «Программирование Clojure». Весь этот функционал материал для меня очень новый.
Я понимаю, как
(defn fibo[]
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))
лениво генерирует последовательность Фибоначчи. Я не понимаю, почему
(last (take 1000000 (fibo)))
работает, а
(nth (fibo) 1000000)
выдает OutOfMemoryError. Не могли бы кто-нибудь объяснить, чем эти два выражения отличаются? (Nth) каким-то образом держится за начало последовательности?
Спасибо!