Clojure Библиотека рекурсии без цикла - PullRequest
4 голосов
/ 27 октября 2011

У меня есть вопрос об итерации и функциях библиотеки 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)))))

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

1 Ответ

4 голосов
/ 27 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...