Вычисления по короткой схеме

Материал из testwiki
Перейти к навигации Перейти к поиску

Шаблон:Стратегии вычисления Вычисления по короткой схеме (Шаблон:Lang-en), также известны как вычисления Маккарти (Шаблон:Lang-en, в честь американского информатика Джона Маккарти) — это стратегия вычисления в некоторых языках программирования, при которой второй логический оператор выполняется или вычисляется только в том случае, если первого логического оператора недостаточно для определения значения выражения. Таким образом, после того, как результат выражения становится очевидным, его вычисление прекращается[1].

Примеры:

  • Если левый операнд AND имеет значение false, то общее значение выражения также false, независимо от значения правого операнда.
  • Если левый операнд OR имеет значение true, то общее значение выражения также true, независимо от значения правого операнда.

В общих словах, в выражениях вида p1p2p3 либо p1p2p3 вычисление продолжается слева направо, пока одно из pn не даст false или true соответственно. Наличие или отсутствие вычисления по короткой схеме особенно важно, если члены выражения — действия с возможными побочными эффектами (помимо вызова функций это может быть останов программы при делении на ноль или выходе за пределы массива). Например, код вида if (n != 0) and (k/n > 17) ... является корректным только, если язык (или компилятор) гарантирует вычисление по короткой схеме[2].

В языках программирования с ленивыми вычислениями (Lisp, Perl, Haskell) логические операторы используются по короткой схеме. В других (Ada, Java, Delphi) доступны как операторы по короткой схеме, так и стандартные логические операторы[3]. Для некоторых логических операций, таких как исключающее «или» (XOR), вычисления по короткой схеме невозможны, потому что для определения результата всегда требуются оба операнда.

Примечания

Шаблон:Примечания

Ссылки