Maple 9.5/10 в математике, физике и образовании
Шрифт:
10.3.7. Объявления переменных глобальными с помощью слова global
Говорят, что запретный плод сладок! Что бы ни говорили о нежелательности работы с глобальными переменными, бывает, что их применение желательно или даже необходимо. Чтобы сделать переменные внутри процедуры глобальными, достаточно объявить их с помощью ключевого слова global, после которого перечисляются идентификаторы переменных.
Следующий пример поясняет применение оператора global в процедуре (файл р5):
В примере переменным а и b вначале присвоены значения 1. Поскольку они в процедуре объявлены глобальными, то внутри процедуры они принимают новые значения х2 и у2. В результате при выходе из процедуры они имеют уже новые значения. Это и есть побочный эффект при исполнении данной процедуры. Если пользователь не знает (или не помнит), что та или иная процедура имеет побочный эффект, то он рискует получить самые неожиданные (и неверные) результаты своих вычислений.
Следует отметить, что нельзя делать глобальными переменные, указанные в списке параметров процедуры, поскольку они уже фактически объявлены локальными. Такая попытка приведет к появлению сообщения об ошибке следующего вида «Error, argument and global `х` have the same name». При этом соответствующие переменные останутся локальными
10.3.8. Функция вывода сообщений об ошибках ERROR
При профессиональной подготовке процедур пользователь должен предусмотреть их поведение при возможных ошибках. Например, если он готовит процедуру или функцию, вычисляющую квадратный корень из действительных чисел, то надо учесть, что такой корень нельзя извлекать из отрицательных чисел (будем, исключительно в учебных целях, считать, что комплексные числа в данном примере недопустимы).
Для контроля за типом данных обычно используются различные функции оценки и тестирования. При выявлении ими ошибки, как правило, предусматривается вывод соответствующего сообщения. Для этого используется функция ERROR.
где exp_1, … — ряд выражений (возможно, пустой). Наиболее часто ERROR выводит просто строковое сообщение об ошибке, например ERROR(`string`). Полное сообщение об ошибке имеет вид.
Приведем пример процедуры, в которой предусмотрен вывод сообщения об ошибке при задании переменной х < 0 (файл р5):
Эта процедура вычисляет квадратный корень из числа х. При х<0 выводится заданное сообщение об ошибке. Еще раз обращаем внимание читателя на учебный характер данного примера, поскольку вычисление квадратного корня (в том числе из комплексных и отрицательных действительных чисел) реализовано встроенной функцией sqrt.
10.3.9. Ключи в процедурах
В объявление процедуры можно включить ключевые слова, вводимые словом
Иногда их называют расширяющими ключами. Предусмотрены следующие ключи:
arrow — определят процедуру-оператор в нотации ->;
builtin — определяет функцию как встроенную;
call external — задает обращение к внешним программным модулям;
copyright — защищает процедуру от копирования.
inline — определяет процедуру как подчиненную (возможно не для всех процедур — см. справку).
load=memberName — загружает нужный для определений процедуры модуль (см. также опцию unload и детали в справке);
operator — объявляет процедуру — функциональный оператор;
system — определяет процедуру как системную,
remember — определяет таблицу памяти для процедуры;
trace — задает трассировку процедуры;
unload=memberName — выгружает нужный для определений процедуры модуль (см. опцию load).
10.3.10. Ключ remember
Ключ remember обеспечивает занесение результатов обращений к процедуре в таблицу памяти, которая используется при исполнении процедуры. Функция ор позволяет вывести таблицу (файл p6):
Ключ remember особенно полезен при реализации итерационных процедур. К примеру, в приведенной ниже процедуре (без использования ключа remember) время вычисления n-го числа Фибоначчи растет пропорционально квадрату n: