if
, then
, elif
, else
, end_if
, _if
Оператор "if" (условный переход в программе)
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Для оператора if в MATLAB® смотрите if
.
ifcondition1
thencasetrue1
elifcondition2
thencasetrue2
elifcondition3
thencasetrue3
... elsecasefalse
end_if _if(condition1
,casetrue1
,casefalse
)
if-then-else-end_if
позволяет условное выражение, переходящее в программе.
Если Булево выражение, condition1
может быть оценен к TRUE
, ответвление casetrue1
, выполняется, и его результат возвращен. В противном случае, если condition2
оценивает к TRUE
, ответвление, casetrue2
выполняется, и его результат возвращен и т.д. Если все условия оценивают к FALSE
, ответвление, casefalse
выполняется, и его результат возвращен.
Все условия, которые оценены во время выполнения оператора if
, должны быть приводимы или к TRUE
или к FALSE
. Условия могут быть даны уравнениями или неравенствами, объединенными с логическими операторами and
, or
, not
. Нет никакой потребности осуществить булеву оценку уравнений и неравенств через bool
. Неявно, оператор if
осуществляет “ленивую” булеву оценку через функции _lazy_and
или _lazy_or
, соответственно. Условие приводит к ошибке периода выполнения, если оно не может быть оценено к TRUE
или FALSE
этими функциями. Cf. Пример 3.
Ключевое слово end_if
может быть заменено ключевым словом end
.
Оператор if condition then casetrue else casefalse end_if
эквивалентен вызову функции _if(condition, casetrue, casefalse)
.
Оператор if
действует, как продемонстрировано ниже:
if TRUE then YES else NO end_if, if FALSE then YES else NO end_if
Ответвление else
является дополнительным:
if FALSE then YES end_if
if FALSE then if TRUE then NO_YES else NO_NO end_if else if FALSE then YES_NO else YES_YES end_if end_if
Как правило, булевы условия даны уравнениями, неравенствами или булевыми константами, произведенными системными функциями, такими как isprime
:
for i from 100 to 600 do if 105 < i and i^2 <= 17000 and isprime(i) then print(expr2text(i)." is a prime") end_if; if i < 128 then if isprime(2^i - 1) then print("2^".expr2text(i)." - 1 is a prime") end_if end_if end_for:
Вместо того, чтобы использовать вложенные операторы if-then-else
, оператор elif
может сделать исходный код более читаемым. Однако внутренне синтаксический анализатор преобразовывает такие операторы в эквивалентные операторы if-then-else
:
hold(if FALSE then NO elif TRUE then YES_YES else YES_NO end_if)
if FALSE then NO else if TRUE then YES_YES else YES_NO end_if end_if
Если условие не может быть оценено или к TRUE
или к FALSE
, то ошибка периода выполнения повышена. В следующем вызове is(x > 0)
производит UNKNOWN
, если никакие соответствующие свойства не были присоединены к x
через assume
:
if is(x > 0) then 1 else 2 end_if
Error: Unable to evaluate to Boolean. [if]
Обратите внимание на то, что булевы условия с помощью <
, <=
, >
, >=
может перестать работать, если они включают символьные выражения:
if 1 < sqrt(2) then print("1 < sqrt(2)"); end_if
if 10812186006/7645370045 < sqrt(2) then print("10812186006/7645370045 < sqrt(2)"); end_if
if is(10812186006/7645370045 < sqrt(2)) = TRUE then print("10812186006/7645370045 < sqrt(2)"); end_if
Этот пример демонстрирует соответствие между функциональным и обязательным использованием оператора if
:
condition := 1 > 0: _if(condition, casetrue, casefalse)
condition := 1 > 2: _if(condition, casetrue, casefalse)
delete condition:
|
Булевы выражения |
|
Произвольные последовательности операторов |
Результат последней команды выполняется в операторе if
. Пустая последовательность, null()
возвращен, если никакая команда не выполнялась.