Чтение онлайн

ЖАНРЫ

Maple 9.5/10 в математике, физике и образовании

Дьяконов Владимир Павлович

Шрифт:

> f:=proc(n) if n<2 then n else f(n-1)+f(n-2) fi end;

f := proc(n) if n < 2 then n else f(n - 1)+f(n-2) end if end proc

> time(f(30));

4.891

> f(30);

832040

Вычисление f(30) по этой процедуре на ПК с процессором Pentium 4 НТ 2,6 ГГц в системе Maple 9.5 время вычисления составляет менее 5 с — см. контроль этого времени с помощью функции time (результат

в секундах).

Стоит добавить в процедуру ключ remember, и время вычислений резко уменьшится:

> restart;

> fe:=proc(n) options remember; if n<2 then n else fe(n-1)+fe(n-2) fi

end:

> fe(30);

832040

> time(fe(30));

0.

При этом вычисление fe(30) происходит практически мгновенно, так как все промежуточные результаты в первом случае вычисляются заново, а во втором они берутся из таблицы. Однако это справедливо лишь тогда, когда к процедуре было хотя бы однократное обращение. Обратите внимание на то, что данные процедуры являются рекурсивными — в их теле имеется обращение к самой себе.

10.3.11. Ключ builtin

Ключ builtin придает процедуре статус встроенной. Он должен использоваться всегда первым. С помощью функции eval(name) можно проверить, является ли функция с именем name встроенной:

> eval(type);

proc option builtin, 274 end proc

> eval(print) ;

proc option builtin, 235 end proc

Числа в теле процедур указывают системные номера функций. Следует отметить, что в новой версии Maple 9 они существенно отличаются от принятых в предшествующих версиях (даже Maple 8).

10.3.12. Ключ system

Этот ключ придает процедуре статус системной. У таких процедур таблица памяти может быть удалена. У обычных процедур таблица памяти не удаляется и входит в так называемый «мусорный ящик» (garbage collector).

10.3.13. Ключи operator и arrow

Эта пара ключей задает процедуре статус оператора в «стрелочной» нотации (->). Это достаточно пояснить следующими примерами:

> o:=proc(x,y) option operator , arrow; x-sqrt(у) end;

о:=(x,y)→x-√y

> о(4, 2);

4 - 2

> о(4, 2.);

2.585786438

10.3.14. Ключ trace

Ключ trace задает вывод отладочной информации:

> o:=proc(x,y) option trace, arrow; x-sqrt(y) end;

о: = proc(x, y) option trace, arrow, x - sqrt(y) end proc

> о(4, 2.);

{—> enter o, args =4, 2.

2.585786438

<- exit
о (now at top level) = 2.585786438}

2.585786438

10.3.15. Ключ copyright

Этот ключ защищает тело процедуры от просмотра. Это поясняют следующие два примера:

> o:=proc(x,y) x-sqrt(у) end;

о: = proc(x, х - sqrt(у) end proc

> oo:=proc(х,у) option Copyright; x-sqrt(у) end;

oo:= proc(x,у) … end proc

> oo(4,2.);

2.585786438

Нетрудно заметить, что во втором примере тело процедуры уже не просматривается. Для отмены защиты от просмотра можно использовать оператор interface(verboseproc=2).

10.3.16. Общая форма задания процедуры

Выше мы рассмотрели основные частные формы задания процедур. Все они могут быть объединены в общую форму задания процедуры:

name:=proc(<argseq>) # объявление процедуры

local<nseq>; # объявление локальных переменных

global<nseq>; # объявление глобальных переменных

uses<useg> # объявление структур use ... in ... end use

options<nseq>; # объявление расширяющих ключей

description<stringseq>; # объявление комментарий

<stateq> # выражения — тело процедуры

end; (или end:) # объявление конца процедуры

Эта форма охватывает все описанные выше частные формы и позволяет готовить самые сложные и надежно работающие процедуры. Читателям-программистам стоит детально изучить по справке возможности этой формы задания процедур, а также возможности конструкции use … in … end use.

10.4. Средства отладки программ

10.4.1. Средства контроля и отладки процедур

Для контроля и отладки процедур прежде всего надо уметь вывести их текст. Для этого, что уже отмечалось, служит команда

print(name);

где name — имя процедуры.

Перед тем как использовать ее, надо также исполнить команду

> interface(verboseproc=2,prettyprint=1,version);

1, 3, Classic Worksheet Interface, Maple 9.50, Windows, Aug 9 2004 Build ID 163356

Ее смысл детально будет пояснен ниже. Пока же отметим, что эта команда обеспечивает полный вывод текста процедур библиотеки. Встроенные в ядро процедуры, написанные не на Maple-языке, в полном тексте не представляются. Поясним это следующими примерами:

Поделиться с друзьями: