(println (iterate inc 0)) は何故出力されるのか
質問者の (println (iterate inc 0)) を実行したときの期待値は、何も表示されることなく延々とスタックを貯め続けることだったみたいですが、そうではなくてこのコードは次のように延々と出力していきます。
user=> (println (iterate inc 0)) (0 1 2 3 4 5 6 7 8 9 10 11 12 13 ....................
(iterate inc 0) が無限の正数列を作るのであれば、これは終わるはずのない計算となり出力できないのではないか、というまぁ真っ当なというかいい質問ですね。
回答を読むと Clojure の lazy seq を読み込んだ方がいいという風に書いてありますが、簡単に言うと lazy seq は完全にリアライズ*1される前にひとつずつリアライズされていくというようなことが書いてあります。
*1:realize って日本語だとなんと訳すのが妥当なんですかね、実体化?