Продолжение вычислений после команды Interrupt[]
Пример 10..5. Продолжение вычислений после команды Interrupt[]
Функция IF
Как у большинства языков программирования, условные выражения задаются с помощью оператора или функции IF. Система Mathematica имеет функцию If, формы которой представлены ниже:- If [condition, t, f] — возвращает t, если результатом вычисления condition является True, и f, если результат равен False;
- If [condition, t, f, u ]—то же, но дает и, если в результате вычисления condition не было получено ни True, ни False.
х := 1; Print["i x"]; Do[{If [i == 5, Abort[], None], i += 1; x += 2*i; Print[i, " ", N[x]]}, {i, 1, 100}] i x 2 5 3 11. 4 19. 5 29. $Aborted Return[x] Return[1] Тот же пример, но с применением директивы выхода из цикла Break [] в функции If показан ниже: х := 1; Print["i x"]; Do[{If [i == 5, Break[], None], i += 1; x += 2*i; Print[i, " ", N[x]]}, {i, 1, 100}] i x 2 5. 3 11. 4 19. 5 29. Return[x] Return[29] В данном случае никаких специальных сообщений о выходе из цикла не выдается. Функция If обеспечивает ветвление максимум по двум ветвям программы. Для ветвления по многим направлениям можно использовать древовидные структуры программ с множеством функций If. Однако это усложняет исходный текст программы.
Функции-переключатели
Для организации ветвления по многим направлениям в современных языках программирования используются операторы-переключатели. В системе Mathematica множественное ветвление организовано с помощью функций Which и Switch:- Which [testl, valuel, test2, value2,...] — вычисляет в порядке следования каждый из testi, сразу возвращая именно ту величину из valuei, которая относится к первому testi, давшему True;
- Switch [expr, forml, valuel, form2, value2,...] — вычисляет селектор expr, затем сравнивает его последовательно с каждой из меток f ormi, вычисляя и возвращая то valuei, которое соответствует первому совпадению.
Безусловные переходы
В целом, условные выражения в языке программирования системы Mathematica позволяют реализовать любой вид ветвления в программах. Однако иногда бывает полезно без лишних раздумий указать в программе явный переход к какой-либо ее части. Для этого используется оператор безусловного перехода Goto [tag]. который дает переход к тому месту программы, которое отмечено меткой Label [tag]. Возможны также формы Goto [expr] и Label [expr], где ехрr — вычисляемое выражение. Применение оператора Goto иллюстрирует следующий пример: (q = 2; Label[start]; Print[q]; q += 2; If[q < 7, Goto[start]]) 2 4 6 Здесь с помощью оператора Goto [start] организован цикл с возвратом на метку Label [start], действующий до тех пор, пока значение q меньше 7. При этом q меняется от начального значения 2 с шагом 2, причем добавление 2 к текущему значению q осуществляется укороченным оператором сложения q+=2. Интересной особенностью языка программирования Mathematica является возможность создания переходов по значению вычисляемого выражения. Например, Goto [2+3] дает переход к метке Label [5] или даже Label [1+4], что видно из следующего примера: Goto[2 + 3]; Print["ааааа"]; Label[1 + 4]; Print["bbbbb"] bbbbb Переходы, задаваемые выражениями, и метки, меняющие свой идентификатор, редко встречаются в обычных языках программирования, хотя они обеспечивают новые обширные и довольно необычные возможности по созданию программ с различными ветвлениями. Для языка программирования системы Mathematica, ориентированного на безупречное и строгое структурное программирование, введение оператора Goto может расцениваться как отступничество от основополагающих идей структурного программирования. Поэтому на применение этого оператора в методах структурного программирования наложено табу. Тем не менее, этот оператор есть, а применять его или нет — дело пользователя.