&&, _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.

Примеры

Пример 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ложь, или UNKNOWN.

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

b1, b2

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

Функции MuPAD