Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MAPLE.doc
Скачиваний:
221
Добавлен:
24.03.2015
Размер:
1.52 Mб
Скачать

Просмотр кодов процедур

Коды процедур на языке Maple можно просмотреть с помощью функции eval(name) или pint(name), где name — имя процедуры. При этом уровень просмотра можно менять с помощью функции interface(verboseproc=N), где N — уровень вывода. Следующий пример иллюстрирует это для только что созданной процедуры mode (файл р4):

> eval(modc);

proc(z) evalf (sqrt((z)^2 + (z)^2)) end proc

> interface(verboseproc=0);

1

> eval(modc);

proc(z) evalf (sqrt((z)^2 + (z)^2)) end proc

> interface(verboseproc=1);

0

> eval(modc);

proc(z) evalf (sqrt((z)^2 + (z)^2)) end proc

Аналогичным образом можно просмотреть коды процедуры, уже созданной в Maple. Например, не очень большой процедуры смены системы координат changecoords из пакета расширении plots:

> interface(verboseproc=0);

1

> eval(plots[changecoords]);

proc(p,coord) … end proc

> interface(verboseproc=2);

0

> eval(plots[changecoords]);

proc(p, coord)

local c_name, a, b, c;

option

 `Copyright (c) 1994 by the University of Waterloo. All rights reserved;`

 a :=1;

 b := 1/2;

 с := 1/3;

 if type(coord, function) then

  c_name :=op(0, coord);

  if nops(coord) = 1 then a :=op(1, coord)

  elif nops(coord) = 2 then a :=op(1, coord); b :=op(2, coord)

  elif nops(coord) = 3 then

   a :=op(1, coord); b :=op(2, coord); с :=op(3, coord)

  else error "Inappropriate number of parameters."

  end if

 else c_name := coord

 end if;

 if member(c_name, `plot3d/coordset2` ( )) then

  (p, c_name, a)

 elif member(c_name , `plot3d/coordset` ( )) then

  `plots/changecoords/threetrans` (p, c_name, a,b,c)

 else error "Cannot convert to coordinate system %1", coord

 end if

end proc

Оператор возврата значения return

Как отмечалось, процедуры, которые возвращают значение результата в ответ на обращение к ним, во многом тождественны функциям. Будем называть их процедурами-функциями. Обычно процедура возвращает значение последнего выражения в ее теле или выражения, намеченного к возврату специальным оператором возврата RETURN (файл р4):

> modc:=proc(z)

> evalf(sqrt(Re(z)^2+Im(z^2)):

> RETURN(%)

> end;

modc := proc(z) evalf (sqrt((z)^2 + (z)^2)); RETURN(%) end proc

> modc(3.+I*4.);

5.000000000

Параметром оператора RETURN может быть любое выражение. В Maple не принято выделять процедуры-функции в какой-то отдельный класс. Действует правило — если не использован оператор RETURN, процедура возвращает значение последнего выражения в ее теле. Для устранения выдачи значений выражений внутри процедуры-функции после них просто надо установить знак двоеточия.

Статус переменных в процедурах и циклах

Переменные, которые указываются в списке параметров (например, z в нашем примере) внутри процедуры являются локальными. Это означает, что изменение их значений происходит лишь в теле процедуры, то есть локально. За пределами тела процедуры эти переменные имеют то значение, которое у них было до использования процедуры. Это хорошо поясняет следующий пример (файл р5):

> restart:z:=1;

z := 1

> modc:=proc(z)

> evalf(sqrt(Re(z)^2+Im(z)^2));

> end;

modc := proc(z) evalf (sqrt((z)^2 + (z)^2)) end proc

> modc(3.+I*4.);

5.000000000

> z;

1

Нетрудно заметить, что внутри процедуры z=3+I*4, тогда как вне нее значение z=1. Таким образом, имена переменных в списке параметров процедуры могут совпадать с именами глобальных переменных, используемых за пределами процедуры.

Переменные, которым впервые присваивается значение в процедуре, также относятся к локальным. Кроме того, переменные, применяемые для организации циклов, являются локальными. Все остальные переменные — глобальные.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]