この怠惰な素数シーケンスの定義が非終了を引き起こす理由がわかりません。私が取得したスタック トレースはあまり役に立ちません (clojure に関する私の不満の 1 つは、スタック トレースがわかりにくいことです)。
(declare naturals is-prime? primes)
(defn naturals
([] (naturals 1))
([n] (lazy-seq (cons n (naturals (inc n))))))
(defn is-prime? [n]
(not-any? #(zero? (rem n %))
(take-while #(> n (* % %)) (primes))))
(defn primes
([] (lazy-seq (cons 2 (primes 3))))
([n] (let [m (first (filter is-prime? (naturals n)))]
(lazy-seq (cons m (primes (+ 2 m)))))))
(take 10 (primes)) ; this results in a stack overflow error