19

ウィキペディアから:

遅延評価は次のとおりです。

プログラミング言語理論では、遅延評価または call-by-need は、値が必要になるまで式の評価を遅らせる評価戦略です。

短絡評価は次

短絡評価、最小評価、または McCarthy 評価は、最初の引数が式の値を決定するのに十分でない場合にのみ 2 番目の引数が実行または評価される、一部のプログラミング言語における一部のブール演算子のセマンティクスを示します。

たとえば、次の場合の違いは何ですか。

if(false && true && true) {
    //boo
} 

私の知る限り、式全体が最終的になるfalseため、コンパイラーは後で式を実行しません。(右?) &&false

では、その動作は遅延評価または短絡評価と呼ばれますか?

4

1 に答える 1

20

違いは、遅延評価の場合は式が必要な場合にのみ評価されるのに対し、短絡評価の場合は式の評価が結果を知った直後に停止することです。それは一種の直交概念です。

遅延評価は、任意の計算に適用できます (短絡スキームは通常、ブール値でのみ使用されます)。無駄な計算を切り捨てませんが、結果が必要になるまで計算全体を遅らせます。

variable = bigAndSlowFunc() or evenSlowerFnc()
if (carry out heavy computations)
  print "Here it is: ", variable
else
  print "As you wish :-)"

評価が遅延の場合、 の最初の ( ) 分岐variableに進むことを選択した場合にのみ計算されます。そうでない場合は計算されません。評価段階 ( の引数を準備するとき) で、短絡スキームを使用して、 を呼び出す必要があるかどうかを判断できます。thenifprintevenSlowerFnc

したがって、あなたの例では、計算の遅延が発生しないため、短絡評価です。

于 2013-02-16T09:27:06.830 に答える