現在、レイジー seq について学んでいますが、それらは通常、 を使用せずに再帰を伴うことに気付きましたrecur
。たとえば、次の実装がありiterate
ます。
(defn iterate
"Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects"
{:added "1.0"
:static true}
[f x] (cons x (lazy-seq (iterate f (f x)))))
を使用せずに再帰するrecur
と、呼び出しごとに新しいスタック フレームが作成され、十分な回数反復するとスタック オーバーフローが発生する可能性があるという印象を受けました。
lazy-seq
スタックフレームをむさぼり食いますか? そうでない場合、どのようにそれを回避しますか?