> for i in [1,2,5,-1,7,12] while i>0 do print(i) od;
В цикле этого вида управляющая переменная может меняться произвольно.
10.2.3. Вложенные циклы и задание с их помощью матриц
Циклы могут быть
> M:=array(1..3,1..3);
> for i to 3 do for j to 3 do M[i,j]:=0; if i=j then M[i,j]:=1 fi; od od;
> evalm(M);
Однако по образцу этого примера читатель может задавать другие, нужные ему, матрицы.
Этот пример имеет не более чем познавательное значение, поскольку дня создания такой матрицы Maple имеет функции identity, с помощью которой функция array позволяет сразу создать единичную матрицу:
> array(1..3,1..3,identity);
10.2.4. Упрощенная конструкция циклов
В заключение отметим, что возможна упрощенная частная конструкция цикла типа while:
while expr do statseq od;
Здесь выражения statseq выполняются, пока выполняется логическое условие expr. Пример такого цикла:
> n:=1;
> while n<16 do n:=2*n od;
В этом примере идет удвоение числа n с начальным значением n=1 до тех пор, пока значение n меньше 16.
10.2.5. Операторы пропуска и прерывания циклов
Иногда бывает нужным пропустить определенное значение переменной цикла. Для этого используется оператор next (следующий). Приведенный ниже пример иллюстрирует применение оператора next в составе выражения if-fi для исключения вывода значения i=-2:
> for i in [1,2,3,-2,4] do if i=-2 then next else print(i) fi od;
Другой оператор — break — прерывает выполнение фрагмента программы (или цикла) Его действие поясняет слегка модифицированный предшествующий пример:
> for i in [1,2,3,-2,4] do if i=-2 then break else print(i) fi od;
В данном случае при значении
Любой из операторов quit, done или stop обеспечивает также прерывание выполнения текущей программы (в частности цикла), но при этом окно текущего документа закрывается.
10.3. Процедуры и процедуры-функции
10.3.1. Простейшие процедуры
Каждая процедура имеет свое уникальное имя и список параметров (он может быть пустым). Процедуры вызываются так же как встроенные функции — указанием их имени со списком фактических параметров. При этом
Простейшая форма задания процедуры следующая:
name := proc(Параметры)
Тело процедуры
end;
Параметры процедуры задаются перечислением имен переменных, например proc(х) или proc(x,y,z). С помощью знака :: после имени переменной можно определить ее тип, например в объявлении prog (n::integer) объявляется, что переменная n является целочисленной.
При вызове процедуры выражением вида
name(Фактические_параметры)
фактические параметры подставляются на место формальных. Несоответствие фактических параметров типу заданных переменных ведет к сообщению об ошибке и к отказу от выполнения процедуры.