В чем разница между функцией Clojure (nth [coll index]) и композицией (last (take index coll))

Я пытаюсь проработать книгу Стюарта Хэллоуэя «Программирование Clojure». Весь этот функционал материал для меня очень новый.

Я понимаю, как

(defn fibo[]
    (map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))

лениво генерирует последовательность Фибоначчи. Я не понимаю, почему

(last (take 1000000 (fibo)))

работает, а

(nth (fibo) 1000000)

выдает OutOfMemoryError. Не могли бы кто-нибудь объяснить, чем эти два выражения отличаются? (Nth) каким-то образом держится за начало последовательности?

Спасибо!

12
задан Josh 15 December 2011 в 15:32
поделиться