Рекурсия библиотеки Clojure без цикла … повторяется

#clojure #loops

#clojure #циклы

Вопрос:

У меня есть вопрос о функциях итерации и библиотеки Clojure, реализованных аналогично итерации.

 (defn iterate
2     "Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects"
3     {:added "1.0"
4      :static true}
5     [f x] (cons x (lazy-seq (iterate f (f x)))))
 

Без цикла … повторная итерация не использует свой стек, потому что она работает с отложенной последовательностью?

Ответ №1:

Да, каждый раз, когда вы вводите следующий элемент в отложенной последовательности, iterate вызывается один раз, поэтому нет (немедленной) рекурсии и нет потребления стека.