熱心な評価の代わりに遅延評価を使用する方が良いのはいつですか? 式が 1 回だけ計算されるか、まったく計算されないことがわかっている方がよいでしょうか。
2 に答える
3
選択できる場合は、まったく評価されない可能性がある式や、評価時に特定の状況下でプログラミング エラーが発生する可能性がある式に対して遅延評価を使用します。
古典的なケースは、C から派生したほとんどの言語で実装されており、「短絡演算子」と呼ばれます。
if (i != 0 && n/i > 100) ...
ここでは、 が 0 でないn/i > 100
場合にのみ計算されi
ます。ゼロ除算エラーを回避できるので、これは素晴らしいことです。
于 2014-05-05T10:34:41.360 に答える
1
Why Functional Programming Mattersは、主に改善されたモジュール性を促進するものとして、遅延評価を支持する典型的な議論です。
例として、エラトステネスのふるいによる素数の怠惰な定式化を提供できます。
primes = (cons 2 . diff [3..] . bigU . map (\p-> [p*p, p*p+p..])) primes
( .
) は関数の合成、diff
集合の差、bigU
数字の (順序付けられた、増加する) リストの (順序付けられた) リストの和集合を見つける、map
ismap
など....、怠惰なセマンティクスがなければ、すべての種類のメカニズムを明示的に維持する必要があります、関数合成で連鎖されたこれらの素敵な個別のモジュラー関数を使用する代わりに、一緒にマッシュアップします。
于 2014-05-05T22:16:22.303 に答える