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

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

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

Примеры:

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

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

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

Примечания

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

Ссылки