我正在尝试编写一个简单的筛选函数来计算clojure中的素数。 我已经看到了关于编写一个有效的筛选函数的问题,但我还没有到那个时候。 现在我只是想写一个非常简单的(慢)筛。 这是我所想到的: (defn sieve [potentials primes] (if-let [p (first potentials)] (recur (filter #(not= (mod % p) 0) potentials) (conj primes p)) primes)) 对于小范围,它工作正常,但会导致大范围堆栈溢出: user=> (sieve (range 2 30) []) [2 3 5 7 11 13 17 19 23 29] user=> (sieve (range 2 15000) []) java.lang.StackOverflowError (NO_SOURCE_FILE:0) 我认为,通过使用recur这将是一个非堆栈消耗循环结构? 我错过了什么?