Clojure: ¿evitar el desbordamiento de la pila en Sieve of Erathosthene?

Aquí está mi implementación de Sieve of Erathosthene in Clojure (basado en la lección SICP en streams):

(defn nats-from [n]
  (iterate inc n))

(defn divide? [p q]
  (zero? (rem q p)))

(defn sieve [stream]
  (lazy-seq (cons (first stream)
            (sieve (remove #(divide? (first stream) %) 
               (rest stream))))))

(def primes (sieve (nats-from 2)))

Ahora, todo está bien cuando tomo los primeros 100 primos:

(take 100 primes)

Pero si trato de tomarprimeros 1000 primos, el programa se rompe debido al desbordamiento de la pila. Me pregunto si es posible cambiar de alguna manera el tamiz de función para volverse recursivo de la cola y, aún así, preservar los "streamnes" del algoritmo.

¿¿¿Alguna ayuda???

Respuestas a la pregunta(1)

Su respuesta a la pregunta