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