Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Самоучитель по Maple.docx
Скачиваний:
294
Добавлен:
08.03.2016
Размер:
17.32 Mб
Скачать

23. Генерация кодов на языке с Генерация кодов на языке с

Язык С (Си) также широко используется для решения вычислительных задач. Достаточно отметить, что сама система Maple 7 создана на языке С.

Для генерации кодов на языке С вначале надо подключить соответствующую функцию:

> with(codegen.C); [С]

Затем можно использовать функцию С:

С(ехрг.folename=str.optimi zed)

Эта функция используется по аналогии с функцией fortran, что и показывают приведенные ниже примеры:

> C(d1ff(x4>,x$2));

t0 = pow(x,1.0*b)*b*b/(x*x)-pow(x,1.0*b)*b/(x*x);

> C(diff(xAb,x$2),optimized);

tl = pow(x,1.0*b);

t2 = b*b;

t4 = x*x;

t5 = l/t4; '

t9 = tl*t2*t5-tl*b*t5;

Обширные возможности преобразования выражений в различные формы предоставляет функция convert. А функция interface позволяет управлять выводом. К сожалению, объем книги не позволяет рассмотреть все многочисленные варианты применения этих функций.

24. Дополнительные возможности Maple-языка Дополнительные возможности Maple-языка

Переназначение определений

В большинстве случаев Maple-язык использует достаточно длинные идентификаторы для своих определений, например функций. Однако с помощью функции al i as можно изменить любое определение на другое, если оно кажется пользователю более удобным. Функция alias записывается в виде:

alias(e1. е2. .... еN)

где e1, e2, ..., eN — ноль или более равенств.

Эта функция возвращает список переназначений и осуществляет сами переназначения. Например, для замены имени функции BesselJ на более короткое имя BJ достаточно параметром функции alias записать BJ=BesselJ:

> alias(BJ-BesseU):

BJ,Fx

> [BJ(0.1.),Besse1J(0,1.)]:

[.7651976866, .7651976866]

Можно также переназначить функцию пользователя:

Для отмены переназначения, например BJ, используется та же функция alias с повтором переназначения:

> a1ias(B>BJ): Fx

> BJ(0,1.); BJ(0,1.)

Обратите внимание на то, что BJ исчезло из списка переназначений и функция BJ(0,1.) уже не вычисляется, поскольку ее больше нет.

20.gif

25. Модули. Модули

Модули придают языку программирования Maple 7 некоторые свойства языков объектно-ориентированного программирования. Они служат для реализации абстрактного типа данных на основе инкапсуляции — объединения данных и процедур их обработки. Модули задаются ключевым словом module с пустыми скобками () и завершаются словами end module или просто end:

name := module()

export eseq; local Iseq; global gseq:

option optseq: description desc:

Тело модуля

end module (или просто end)

Хотя структура модуля во многом напоминает структуру процедуры, включая объявление локальных и глобальных переменных, параметров и описаний, между ними есть существенная разница:

  • модуль не имеет списка входных параметров; О в модуле могут размещаться данные;

  • модули могут использоваться для создания пакетов процедур, доступ к которым обеспечивается командой with;

  • модули имеют свойства в виде локальных переменных и методы в виде процедур интерфейса модулей;

  • реализация абстрактных типов данных с помощью модулей скрыта от пользователя;

  • модули могут содержать оператор export eseq, объявляющий экспортируемые переменные модуля;

  • для доступа к экспортируемым переменным модуля может использоваться специальный оператор «:-» (двоеточие и минус);

  • модули и процедуры могут вкладываться друг в друга без ограничения уровня вложенности;

  • модули могут иметь специальные конструкторы объектов.

Следующий пример демонстрирует создание модуля pt, в котором заданы две операции (сложения plus и умножения times) и показан доступ к ним:

> pt:= module()

export plus, times;

plus := (a.b) -> a + b;

times := (a.b) -> a * b: end module:

pt := module () export plus, times; end module

> pt:-p1us(3,5);

8

> pt:=times(3,7);

21

Детальную информацию о модулях и о конструкторах объектов можно найти в справках по ним. Некоторые пакеты Maple 7 (в основном сравнительно новые) реализованы уже не в виде процедур, а в виде модулей (например, в виде модуля сделан пакет LinearAlgebra). В простейшем виде модули могут использоваться всеми пользователями системы Maple 7, но их серьезное применение (например, с целью создания полноценных пакетов Maple 7) требует серьезного знакомства с техникой объектно-ориентированного программирования. Такое знакомство выходит за рамки данной книги.