&&
, _lazy_and
“сорвите и” Булевых выражений
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
b1 && b2 && …
_lazy_and(b1, b2, …
)
b1 && b2 && ...
выполняет Булево выражение b1 and b2 and ...
“оценкой короткого замыкания”.
b1 && b2 && ...
приводит к тому же результату как bool(b1 and b2 and ...)
, если последний вызов не выдает ошибку. Различие между этими вызовами следующие. Вызов bool(b1 and b2 and ...)
выполняет все Булевы выражения прежде, чем объединить их логически через and
.
_lazy_and(b1, b2, ...)
равно b1 && b2 && ...
.
Обратите внимание на то, что результатом является FALSE
если один из b1
, b2
, и так далее оценивает к FALSE
. “сорвите оценку”, основан на этом факте: b1 && b2 && ...
оценивает аргументы слева направо. Оценка сразу останавливается, если один аргумент оценивает к FALSE
. В этом случае, _lazy_and
возвращает FALSE
не выполняя остающиеся Булевы выражения. Если ни одно из выражений b1
, b2
, и так далее оценивает к FALSE
, затем все аргументы оценены и соответствующий результат (TRUE
или UNKNOWN
) возвращен.
_lazy_and
также называется “условным and
”.
Если любое из продуманных Булевых выражений b1
, b2
, и так далее не может быть оценен к TRUE
ложь
, или UNKNOWN
, затем _lazy_and
выдает ошибку.
_lazy_and
используется внутренне if
повторение
, и while
операторы. Например, оператор if b1 and b2 then ...
эквивалентно if b1 && b2 then ...
.
_lazy_and()
возвращает TRUE
.
Этот пример показывает различие между коротким замыканием и полной оценкой булевых условий. Для x = 0, оценка приводит к ошибке:
x := 0: bool(x <> 0 and 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 and sin(1/x) = 0 then print(x) end_if; end_for:
delete x
_lazy_and
может быть назван без параметров:
_lazy_and()
|
Булевы выражения |
TRUE
ложь
, или UNKNOWN
.
b1
, b2