* Данный текст распознан в автоматическом режиме, поэтому может содержать ошибки
1046
Программирование в системах компьютерной алгебры
Эта форма охватывает все описанные выше частные формы и позволяет гото вить самые сложные и надежно работающие процедуры. Применение в процеду рах ключей будет описано чуть ниже.
14.2.6. Статус переменных
Переменные, которые указываются в списке параметров (например, z в нашем примере) внутри процедуры, являются локальными. Это означает, что изменение их значений происходит лишь в теле процедуры, то есть локально. За пределами тела процедуры эти переменные имеют то значение, которое у них было до ис пользования процедуры. Это хорошо поясняет следующий пример:
> restart:z:=1;
z := 1
> modc:=proc(z) > evalf(sqrt(Re(z)^2+Im(z)^2)); > end; > modc(3.+I*4.);
5.000000000
> z;
1 Нетрудно заметить, что внутри процедуры z = 3 + I*4, тогда как вне ее значе ние z = 1. Таким образом, имена переменных в списке параметров процедуры мо гут совпадать с именами глобальных переменных, используемых за пределами процедуры. Переменные, которым впервые присваивается значение в процедуре, также относятся к локальным. Кроме того, переменные, применяемые для организации циклов, являются локальными. Все остальные переменные – глобальные. Если в теле процедуры имеются операции присваивания для ранее определен ных (глобальных) переменных, то изменение их значений в ходе выполнения про цедуры создает так называемый побочный эффект. Он способен существенно из менить алгоритм решения сложных задач и, как правило, недопустим. Поэтому Maple язык программирования имеет встроенные средства для ис ключения побочных эффектов. Встречая такие операции присваивания, Maple язык корректирует текст процедуры, вставляет в нее объявление переменных локальными с помощью ключевого слова local и выдает предупреждающую надпись о подобном применении:
> restart:m:=0;
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`