if, then, elif, else, end_if, _ifОператор "if" (условный переход в программе)
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Для оператора if в MATLAB® смотрите if.
ifcondition1thencasetrue1elifcondition2thencasetrue2elifcondition3thencasetrue3... elsecasefalseend_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() возвращен, если никакая команда не выполнялась.