if, then, elif, else, end_if, _if

Оператор "if" (условный переход в программе)

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Для оператора if в MATLAB® смотрите if.

Синтаксис

if condition1
then casetrue1
   elif condition2 then casetrue2
   elif condition3 then casetrue3
   ...
   else casefalse
 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 этими функциями. См. Пример 3.

Ключевое слово end_if может быть заменен ключевым словом end.

Оператор if condition then casetrue else casefalse end_if эквивалентно вызову функции _if(condition, casetrue, casefalse).

Примеры

Пример 1

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:

Пример 2

Вместо того, чтобы использовать вложил 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

Пример 3

Если условие не может быть оценено ни к одному 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

Пример 4

Этот пример демонстрирует соответствие между функциональным и обязательным использованием if оператор:

condition := 1 > 0: _if(condition, casetrue, casefalse)

condition := 1 > 2: _if(condition, casetrue, casefalse)

delete condition:

Параметры

condition1, condition2, …

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

casetrue1, casetrue2, casefalse, …

Произвольные последовательности операторов

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

Результат последней команды выполняется в if оператор. Пустая последовательность, null() возвращен, если никакая команда не выполнялась.

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

Функции MuPAD