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

_lazy_and используется внутренне if, repeat и операторами while. Например, оператор if b1 and b2 then ... эквивалентен if b1 && b2 then ....

_lazy_and() возвращает TRUE.

Примеры

Пример 1

Этот пример показывает различие между коротким замыканием и полной оценкой булевых условий. Для 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

Пример 2

Следующие операторы не делают никакого вывода к ошибке, потому что использование 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

Пример 3

_lazy_and может быть назван без параметров:

_lazy_and()

Параметры

b1, b2, …

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

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

TRUE, FALSE или UNKNOWN.

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

b1, b2

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

Функции MuPAD