||, _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, FALSE или UNKNOWN, то _lazy_or выдает ошибку.

_lazy_or используется внутренне if, repeat и операторами 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, FALSE или UNKNOWN.

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

b1, b2

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

Функции MuPAD