Если единственная циклическая конструкция, не потребляющая стек, в Clojure - это «recur», как работает этот lazy-seq?

Страница ClojureDocs дляlazy-seq приводит пример генерации lazy-seq всех положительных чисел:

(defn positive-numbers
  ([] (positive-numbers 1))
  ([n] (cons n (lazy-seq (positive-numbers (inc n))))))

Этот lazy-seq может быть оценен для довольно больших индексов без выброса ошибки StackOverflowError (в отличие от примера sieve на той же странице):

user=> (nth (positive-numbers) 99999999)
100000000

Еслитолькоrecur может использоваться, чтобы избежать потребления кадров стека в рекурсивной функции, как возможно, что этот пример lazy-seq может вызывать себя без переполнения стека?

Ответы на вопрос(3)

Ваш ответ на вопрос