Ключи в процедурах В объявление процедуры можно включить ключевые слова, вводимые словом  options opseq Иногда их называют расширяющими ключами. Предусмотрены следующие ключи:  arrow — определят процедуру -оператор в нотации ->;  bulltin — определяет функцию как встроенную;  call_external — задает обращение к внешним программным модулям;  copyright — защищает процедуру от копирования;  inline — определяет процедуру как подчиненную (возможно, не для всех процедур - см. справку);   load=memberName — загружает нужный для определений процедуры модуль (см. также опцию unload и детали в справке);   operator — объявляет процедуру — функциональный оператор;  system — определяет процедуру как системную,  remember — определяет таблицу памяти для процедуры;  trace — задает трассировку процедуры;  unl oacNnemberName — выгружает нужный для определения процедуры модуль (см. опцию load). Ключ remember Ключ remember обеспечивает занесение результатов обращений к процедуре в таблицу памяти, которая используется при исполнении процедуры. Функция ор позволяет вывести таблицу: > f:=proc(x) options remember; х^3 end:  > f(2): 8 > f(3): 27 > op(4,eval(f)): table([2 = 8, 3 = 27]) , Ключ remember особенно полезен при реализации итерационных процедур. К примеру, в приведенной ниже процедуре (без использования ключа remember) время вычисления n-го числа Фибоначчи растет пропорционально квадрату n:  > f:=proc(n) if n<2 then n else f(n-l)+f(n-2) fi end;  f:=proc(w)if n <2 then и else f(n - l) + ft>-2)endif endproc  > time(f(30)): 27.400  > f(30): 832040 Вычисление f(30) по этой процедуре на ПК с процессором Pentium II 350 МГц занимает около 30 с — см. контроль этого времени с помощью функции time (результат в секундах). Стоит добавить в процедуру ключ remember, и время вычислений резко уменьшится: > restart; > fe:-proc(n) options remember: if n<2 then n else fe(n-l)+fe(n-2) fi end:  > fe(30); 832040 > time(fe(30));  0. При этом вычисление fe(30) происходит практически мгновенно, так как все промежуточные результаты в первом случае вычисляются заново, а во втором они берутся из таблицы. Однако это справедливо лишь тогда, когда к процедуре было хотя бы однократное обращение. Обратите внимание на то, что данные процедуры являются рекурсивными — в их теле имеется обращение к самим себе.   Ключ builtin Ключ builtin придает процедуре статус встроенной. Он должен использоваться всегда первым. С помощью функции eval(name) можно проверить, является ли функция с именем name встроенной: > eval(type); proc() option builtin; 268 end proc  > eval(print); proc() option builtin; 229 end proc Числа в теле процедур указывают системные номера функций. Следует отметить, что в новой версии Maple 7 они существенно отличаются от принятых в предшествующих версиях. Ключ system Этот ключ придает процедуре статус системной. У таких процедур таблица памяти может быть удалена. У обычных процедур таблица памяти не удаляется и входит в так называемый «мусорный ящик» (garbage collector). Ключи operator и arrow Эта пара ключей задает процедуре статус оператора в «стрелочной» нотации (->). Это достаточно пояснить следующими примерами:   Ключ trace Ключ trace задает вывод отладочной информации: > о:=ргос(х,у) option trace, arrow; x-sqrt(y) end:   о := proc (x, y) option trace, arrow, x - sqrt(y) end proc > o(4,2.); {--> enter o, args = 4,2. 2.585786438 <-- exit о (now at top level) = 2.585786438}  2.585786438   Ключ copyright Этот ключ защищает тело процедуры от просмотра. Это поясняют следующие два примера: > o:=proc(x,y) x-sqrt(y) end:  о := proc (x, у) х- sqii(y) end proc > oo:=proc(x.y) option Copyright; x-sqrt(y) end; oo := proc(x,y) ... endproc  > oo(4.2); 2.585786438 Нетрудно заметить, что во втором примере тело процедуры уже не просматривается. Для отмены защиты от просмотра можно использовать оператор interfасе(verboseproc=2).