||, _lazy_or

“сорвите или” Булевых выражений

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

b1 || b2 || …
_lazy_or(b1, b2, …)

Описание

b1 || b2 || ... выполняет Булево выражение b1 or b2 or ... “оценкой короткого замыкания”.

b1 || b2 || ... приводит к тому же результату как bool(b1 or b2 or ...), если последний вызов не выдает ошибку. Различие между этими вызовами следующие. Вызов bool(b1 or b2 or ...) выполняет все Булевы выражения прежде, чем объединить их логически через or.

_lazy_or(b1, b2, ...) равно b1 || b2 || ....

Результатом является TRUE если один из b1, b2, и так далее оценивает к TRUE. “сорвите оценку”, основан на этом факте: b1 || b2 || ... оценивает аргументы слева направо. Оценка сразу останавливается, если один аргумент оценивает к TRUE. В этом случае, _lazy_or возвращает TRUE не выполняя остающиеся Булевы выражения. Если ни одно из выражений b1, b2, и так далее оценивает к TRUE, затем все аргументы оценены и соответствующий результат FALSE или UNKNOWN возвращен.

_lazy_or также называется “условным or”.

Если любое из продуманных Булевых выражений b1, b2, и так далее не может быть оценен к TRUEложь, или UNKNOWN, затем _lazy_or выдает ошибку.

_lazy_or используется внутренне ifповторение, и while операторы. Например, оператор if b1 or b2 then ... эквивалентно if b1 || b2 then ....

_lazy_or() возвращает FALSE.

Примеры

Пример 1

Этот пример показывает различие между оценкой короткого замыкания и полной оценкой булевых условий. Для x = 0, оценка приводит к ошибке:

x := 0:
bool(x = 0 or sin(1/x) = 0)
Error: Division by zero. [_invert]

С “оценкой короткого замыкания”, не выполнено выражение. Это избегает предыдущей ошибки:

x = 0 || sin(1/x) = 0

delete x:

Пример 2

Следующие операторы не делают никакого вывода к ошибке потому что if использование срывает оценку внутренне:

for x in [0, PI, 1/PI] do
  if x = 0 or sin(1/x) = 0 then
     print(x)
  end_if;
end_for:

delete x

Пример 3

_lazy_or() может быть назван без параметров:

_lazy_or()

Параметры

b1, b2, …

Булевы выражения

Возвращаемые значения

TRUEложь, или UNKNOWN.

Перегруженный

b1, b2

Смотрите также

Функции MuPAD