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 этими функциями. См. Пример 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() возвращен, если никакая команда не выполнялась.