||
, _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
.
Этот пример показывает различие между оценкой короткого замыкания и полной оценкой булевых условий. Для 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:
Следующие операторы не делают никакого вывода к ошибке, потому что использование 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
_lazy_or()
может быть назван без параметров:
_lazy_or()
|
Булевы выражения |
TRUE
, FALSE
или UNKNOWN
.
b1
, b2