Overflow durante o uso recorrente no clojure

Eu tenho uma calculadora simples de números primos no clojure (um algoritmo ineficiente, mas só estou tentando entender o comportamento do retorno por enquanto). O código é:

(defn divisible [x,y] (= 0 (mod x y)))

(defn naive-primes [primes candidates] 
  (if (seq candidates)
      (recur  (conj primes (first candidates)) 
              (remove (fn [x] (divisible x (first candidates))) candidates))
      primes)
)

Isso funciona, desde que eu não esteja tentando encontrar muitos números. Por exempl

(print (sort (naive-primes [] (range 2 2000))))

trabalho. Para qualquer coisa que exija mais recursão, recebo um erro de estouro.

    (print (sort (naive-primes [] (range 2 20000))))

não funciona. Em geral, se eu recorrer ou chamar primos ingênuos novamente sem a tentativa de TCO não parece fazer nenhuma diferença. Por que estou recebendo erros por grandes recursões enquanto uso recorrentes?

questionAnswers(2)

yourAnswerToTheQuestion