私は、不変値を使用したプログラミングの Clojure / 関数型アプローチの大ファンです。
ただし、遅延を不変の値と見なす必要があるかどうかはわかりません (純粋な関数を遅延させると仮定して)。私が特に興味を持っているのは、より大きな不変データ構造に 1 つ以上の遅延がある場合です。
たとえば、遅延を含むベクトル:
[1 2 (delay (reduce + (range 1000)))]
私が見る限り、これは、評価を強制するまで遅延の結果を見ることができないという意味で、不変の値であるかのように動作します。その後、結果はキャッシュされ、その後は値が変更されることはありません。
このように遅延を不変値として扱うことに問題はありますか?