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

на главную

Жанры

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

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

Шрифт:

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

10.3.4. Оператор возврата значения 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, процедура возвращает значение последнего выражения в ее теле. Для

устранения выдачи значений выражений внутри процедуры-функции после них просто надо установить знак двоеточия.

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

Переменные, которые указываются в списке параметров (например, 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. Таким образом, имена переменных в списке параметров процедуры могут совпадать с именами глобальных переменных, используемых за пределами процедуры.

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

10.3.6. Объявления переменных локальными с помощью оператора local

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

Поэтому Maple-язык программирования имеет встроенные средства для исключения побочных эффектов. Встречая такие операции присваивания, Maple-язык корректирует текст процедуры и вставляет в нее объявление переменных локальными с помощью ключевого слова local и выдает предупреждающую надпись о подобном применении (файл р5):

> 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'

modc:= proc(z) evalf (sqrt(ℜ(z)^2 + ℑ(z)^2)); RETURN(m) end proc

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

5.000000000

> m;

0

Обратите внимание на то, что в тело процедуры было автоматически вставлено определение local m, задающее локальный статус переменной m. Оператором print (modc) можно вывести текст процедуры.

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6