このレイジー seq がスタック オーバーフローを引き起こす理由と、dorun にシーケンスを渡したときに発生しない理由を理解できません。
(defn very-lazy [s]
(lazy-seq
(if (seq s)
[(first s) (very-lazy (rest s))]
[])))
(dorun (very-lazy (range 200000000)))
>nil
(take 2 (very-lazy (range 20000000))
>...(1577 (java.lang.StackOverflowError
怠け者の場合take 2
、怠惰な seq を 2 回だけ反復させる必要があります。