遅延評価について
ここでいう遅延評価は単に遅れて評価すること。
GUIが出てくる場合遅延評価せざるを得ない。ボタンを押したときに実行される関数Xは、ボタンを押すときまで評価が遅延される。
遅延評価される関数の組み合わせで処理を行う場合、処理途中の状態をオブジェクトとしてヒープに持たないといけない。処理途中の状態は簡単にオブジェクトに出来る。yieldはそれを自動化してくれる。
遅延評価しなくても処理途中の状態をオブジェクトにすることは有益だ。関数に引数が一杯あると可読性が下がる。処理を終えた変数にいつまでもアクセスできるのは望ましくない。
ドメイン特化言語は遅延評価される。特化言語はソースを解析した後実行されるから。先行評価可能な言語の言語内言語として特化言語を作る場合は、先行評価を注意深く避けないと混乱するハメになる。C#だとFunc