end proc
10.3.4. Оператор возврата значения RETURN
Как отмечалось, процедуры, которые возвращают значение результата в ответ на обращение к ним, во многом тождественны функциям. Будем называть их процедурами-функциями. Обычно процедура возвращает значение последнего выражения в ее теле или выражения, намеченного к возврату специальным
> modc:=proc(z)
> evalf(sqrt(Re(z)^2+Im(z^2)):
> RETURN(%)
> end;
> modc(3.+I*4.);
Параметром оператора RETURN может быть любое выражение. В Maple не принято выделять процедуры-функции в какой-то отдельный класс. Действует правило — если не использован оператор RETURN, процедура возвращает значение последнего выражения в ее теле. Для устранения выдачи значений выражений внутри процедуры-функции после них просто надо установить знак двоеточия.
10.3.5. Статус переменных в процедурах и циклах
Переменные, которые указываются в списке параметров (например, z в нашем примере) внутри процедуры являются
> restart:z:=1;
> modc:=proc(z)
> evalf(sqrt(Re(z)^2+Im(z)^2));
> end;
> modc(3.+I*4.);
> z;
Нетрудно заметить, что внутри процедуры
Переменные, которым впервые присваивается значение в процедуре, также относятся к локальным. Кроме того, переменные, применяемые для организации циклов, являются локальными. Все остальные переменные — глобальные.
10.3.6. Объявления переменных локальными с помощью оператора local
Если в теле процедуры имеются операции присваивания для ранее определенных (глобальных) переменных, то изменение их значений в ходе выполнения процедуры создает так называемый побочный эффект. Он способен существенно изменить алгоритм решения сложных задач и, как правило, недопустим.
Поэтому Maple-язык программирования имеет встроенные средства для исключения побочных эффектов. Встречая такие операции присваивания, Maple-язык корректирует текст процедуры и вставляет в нее объявление переменных локальными с помощью ключевого слова local и выдает предупреждающую надпись о подобном применении (файл р5):
> restart:m:=0;
> modc:=proc(z)
> m:=evalf(sqrt(Re(z)^2+Im(z)^2)):RETURN(m)
> end;
Warning, `m` is implicitly declared local to procedure 'modc'
> modc(3.+I*4.);
> m;
Обратите внимание на то, что в тело процедуры было автоматически вставлено определение local m, задающее локальный статус переменной m. Оператором print (modc) можно вывести текст процедуры.
10.3.7. Объявления переменных глобальными с помощью слова global
Говорят, что запретный плод сладок! Что бы ни говорили о нежелательности работы с глобальными переменными, бывает, что их применение желательно или даже необходимо. Чтобы сделать переменные внутри процедуры
Следующий пример поясняет применение оператора global в процедуре (файл р5):
> а:=1;b:=1;
> fg:=proc(х, у)
> global a,b;
> а:=х^2:b:=у^2:
> RETURN(sqrt(a+b));
> end;
> fg(3, 4);