Clojure: Evitando o estouro de pilha na Peneira de Erathosthene?

Aqui está minha implementação do Sieve of Erathosthene in Clojure (com base na lição do SICP sobre fluxos):

(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)))

Agora, tudo bem quando tomo as primeiras 100 primas:

(take 100 primes)

Mas, se eu tentar tirarprimeiros 1000 primos, quebras de programa devido ao estouro de pilha. Gostaria de saber se é possível alterar de alguma forma a peneira de função para se tornar recursivo da cauda e, ainda assim, preservar "fluxos" de algoritmo?

Qualquer ajuda???

questionAnswers(1)

yourAnswerToTheQuestion