Прохоров Г.В., Леденев М.А., Колбеев В.В. Пакет символьных вычислений Maple V (1185912), страница 15
Текст из файла (страница 15)
> па!гасе(Щ > тг(4); Ключ рагнаре Создает библиотечную процедуру. Пример приведен ниже. Примечгтие; библиотечные процедуры загружаются оператором ччгЬ. > 1! А расправе дейпей Ьу а ргоседпге > !ша!а2 иа ргос()!оса!в,1; орг(оп рас)гаае; > 1 на 1ша1а2( Рас$сааеТаЫе): > еча1(1(еча1(ор(ргоспаше),1))(агав)); > еп4: > Ипа)п2( Рас$сапеТаЫе) ва еча1(1(па!я) Процедуры 169 > гг(г(г(1(па!й2,ачЫ); [а~Я) Ключ Соргтгядг Защищает процедуру от просмотра. При просмотре защищенной процедуры ее текст выводиться не будет. Отменить действие ключа Спрут|я)зг можно команлой 1пгегГасе(уегЬозергос=2).
> гпургос:=ргос(у) > ор(1оп Спрут(я(зГ; > у+4 > еаг): > шургос(4); > ега1(гаургос); ргос(у) . елгу тб.4. Просеоеное значений параметрам При описании процедуры указывается список ее формальных параметров. При обращении к процедуре указывается список действительных параметров. В следующем примере в процедуре Г формальный параметр — а, действительный параметр — 2. При вызове процедуры действительные параметры присваиваются формальным.
Глава 16 > Е=ргос(а) > а~2 > епд: > Г(2); При передаче действительных параметров в процедуру проверяется совместимость типов формальных и действительных параметров. В случае их несовпадения генерируется ошибка. Действительные параметры перед передачей в процедуру предварительно вычисляются. > Г(6 — 4); 4 Количес ~ во передаваемых в процедуру действительных параметров может быть не равным количеству формальных параметров (но не меньше количества формальных параметров). > Г(2,34,56,7); Гб.б. Сообщения об ошибках и завершение процессов Выполнение процедуры можно прервать оператором ЕККОК. В этом случае буде1 выдано сообгцение "Еггог, <(и имя процедуры> < список параметров ЕККОК>' Синтаксис ЕККОК: ЕККОК(список параметров). > Г:= ргос (х) 1Г х<0 гйеп ЕКЙОК(цпта! Ы х', х) е)яе х'(1/2) Г( епв: Процедуры > г(2); > г( — 2); Еггог, (ьл ) ьяяаИ х, -2 Если вызов процедуры произошел в режиме ггареггог(..), то список параметров ЕККОК присваивается переменной (азгеггог.
> ггареггог((( — 2)): > (г " = 1азгеггог гйеп 'еггог осспггед' е1яе 'по еггог оссшгед' Й; егз ог оссиггей Процедура после выполнения действий возвращает значение последнего выполненного оператора. Это правило можно изменить при помощи КЕТ(.)К(ч КЕТ()К14 прерывает выполнение процедуры и возвращает список значений. Синтаксис КЕ ШК)ч(<список параметров>). > де)га:=ргос(1) > (г" 1=0 гйеп КЕТ$.'Й)ч((п(1п(гу) е)яе ЙЕТ(ЗЙз 1(0) Й > епд: > де1(а(1); де1га(0); С помощью КЕТ(/Ко) можно передавать не только численные значения.
> и:=ргос(1)„. > ЙЕТ%3Й1Ч('ргоспапзе(аг0я)') > епд: 172 Глава 16 > я(4); я(4) Ключевос слово ГА!Ь предназначено для прерывания процедуры. гА!Ь используется для сообшення о ток, что выражение нельзя вычислить. > )з;=ргос(!) > гА1Ь > епе: > )г(5)1 16.б. Бупееские процедуры Булевские процедуры определяются так же, как и обычные. > я:=ргос(х.у) > хогу > епг): > д(1гпе,(а!яс)1 > согпр:=ргос(х,у) > (г" х>у Игеп ггие е1яе га1зе 6 > епй; еолзр = ргое(з.у) гуу < х Йел ггае е!зев)хе 7) елй Процедуры !73 > !г" сопзр(3, — 2) г)зеп 1 е1яе О 6; 76.7.
Вызов и сохранение процедур в файлах на диске Запись процедур в файл: вате <список имен>,<имя файла> Чтение процедур из файла: геас) <имя файла> > П:=ргос(хо ) > к<2+уе2 > епо: > П:=ргос(х,у) > х'3+у'3 > епа: > вате П,О,ргогз!е; > геао ргойе: 27:= рсос~ и ! 7 к <2+> "2 ет1 /2. =ргос' ц1 с хс "3+у "3 слс) Процедуры можно записать в файл во внутреннем формате Мар!е. Для зтого просто надо лобавить к имени файла расширение ".т". > вате П,'рго. пу; > геаа 'рго.п1; Кроме ззих возможностей сохранения процедур Мар!е имеет большие возможносп~ создания библиотек. Глава 17 174 17. ОПЕРАТОРЫ В Мар1е операторы - это абстрактный тип данных, описывающий операции преобразования над данными.
17.1. Определение операторов в Мар)в Варианзы описания операторов: ° неопределенный ((); ° нейтральный (определяемый пользователем) ( Юс ); ° процедурный; ° стрелочная нотация; ° нотация угловых скобок; ° компо пп1иопный опера гор ((га) . Неопределенный оператор — это оператор, который заранее не был определен. Такой оператор не выполняет никаких действий.
> 1(3,4,5)1 ((3,4, 5) Нейтральный оператор (определяемый пользователем) обозначается значком ачперсантак. Синтаксис описания оператора: ес имя. Имя — э~о любое разрешенное в Мар!е имя или набор специальных символов. В имя оператора нельзя включать цифры и следующие символы: й ( ( 1 ( ( ( );: ' ' Ф <Ек(ТЕК> <БРАСЕ> Максимальная длина имени - 495 символов.
Й-опера торы можно использовать как унарный префиксный оператор или как инфиксный бинарный. Эти операторы генерируют функциональные вызовы с именем нейтрального оператора. Операторы > а * Ь й+ с; а (Ь В+с) > а огхх Ь вЂ” огхх(а,Ь); Опера~ар ~акже можно описать через процедуру.
> (й:=ргос(х) > орйоп орегасог; > хл2 > спи; ф=(х ~ х) > цй(5); 25 В Мар1с можно определять функциональные операторы. Функциональные операторы — это форма представления пользовательских математических функций. Определить функциональный оператор можно в "стрелочной нотации". Синтаксис стрелочной нотации: (список переменных функции)->(функция) > )а:=х — >(х'2); ф =х — ьх > ('й(4); 16 > й:=(х,у,г) — >(х+у+г); г(Г" = ( х+у+г ~ х,у,г) 176 Глава 17 Функциональный оператор можно определить в нотации "угловых скобок".
Синтаксис такой нотации: < функция ) список переменных> > (йпе<х" 2~х>; 1я=(х ! х) > зй(4); 1б > йй=<х+у+х1х,у,х>; ф" — — ( х +у+ х ! х,у,х ) > аз(1,2,3)1 Можно определить (ю - композиционный оператор; > 6=сов(юя(п; 7 = соя®впз > (сов1юя(п) (х); с О 5 ( 5аз(л ) ) > (соа(а)(а'2)(х)' соя (х) (2) Определение операторов с помощью йег)пе Оператор с(еГ1пе реализует определение оператора и его свойств. Пе11пе позволяет определить оператор в двух нотациях: Операторы !77 ° инфиксной (й — имя); ° функциональной (Г(х)). Синтаксис: !зеГ!пе(Г,<список свойств>), где Г- имя оператора, реализующего вычисления.
Свойства операторов; ипату Ьйнп.у аззос!аг)не — унарный оператор; бинарный оператор; — ассоциативный оператор; Г(х,Г(у,г))=Г(Г(х,у),х)= Г(х,у,х). — коммутативный оператор, Г(х,у)=Г(у,х); сошшогайне или зупз!нег!)с апг!злпшегпс — асимметричный оператор, Г(х,у) = -Г(у,х); — определяет инверсный оператор, (Г ->а); — определение "нуля*' оператора. Если любой из аргументов оператора равен х, то оператор возвращает х.
н!л егве=й гего=л > ое((пе(Г,Ь!пасу,аяяос!а1(не,гего=1)! Игаггг(гг!ь пеа г(е/гг!(!(гзп(аг 1 > рплю(Г); ргас( ! (аса! АА ь(5!Хп АА = (пгя5/ АА = шар! ргас! ьра ! г(црсгл(аап!ап! пас!ар(цх! =рп (йегг Од! л! еле л 7! епг! , АА,(па!паше! ! =7, =г!о(г! ЛА!, п(п(е ю < ! г(а Просмотреть текст процедуры можно с помощью рпп!. Опе ато ы !79 > х Й+(у8с+ х) 8с+ (Ой+ х); Й+(х, х,у, г) > ЙейпеИ, сопппп<а!(че, аааос(а!(ее, (ические=а); Ь7ати~ие. иеа Мс)аихеои7от 1 > ((а(х), х,((а,у), у ); с(у,у,г) 180 Глава 18 1е.
ВНЕШНИЕ ВЫЗОВЫ И МАНИПУЛЯЦИИ Мар1е предоставляет возможность вызова других программ и команд операционной системы. Эта функция работает в среде Мар!е, установленной под ОО8. Реализует эту функция команда эумегп. Синтаксис эумеш эуэ|еш (<строка>); где «строка> — команда, передаваемая в 008. Например. если выполнить команду хужеет (сйг); то будет выведено содержимое ~скущего каталога. С помощью эумет можно организовать обмен данными с другими программами.
Рассмоэ рнм простой пример внешнего вызова. Например, на Рааса! написана программа, реализующая численный метод (для простоты пусть это будет программа перемножения двух чисел). РОЗ позволяет в командной с~рокс определить файл. из которого будут считаны исходные ланные. н файл, в который будут записаны результаты. Например, сйрго8.ехе < 1прцг гх1 > ошрцглхг реализует сказанное выше.
В этой команде ООэ файл ргой.ехе — запускаемая программа, файл шрщдх( — файл исходных л шных, файл оцгрц! Лхг — файл результатов. Чтобы орг анизовать такой обмен в Мар1е, надо создать файл исходных данных. Э~о можно сделать стандартными средствами Мар!е. Затем выполняем внешний вызов: эуыет('рго8.ехе < 1прцкгх1 > оц(рц(дхГ). После этого результаты работы программы ргод.ехе можно считать из файла оцзрцглх~ Описанный способ внешнего вызова не рациональный, так как обмен данными иле~ через текстовый файл.
Дополнительные возможности языка Мар!е 19. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ ЯЗЪ|КА МАР(.Е 19.1. Отладка и синтаксис сообщений об ошибках Наиболее простой способ отладки программ на языке Мар!е У вЂ” это отладка с помощью рппг!ече!. РПп11ече! — это глобальная переменная, начальное значение которой равно единице. Если установить ее значение больше чем 1, то будет распечатываться пошаговое выполнение введенной процедуры, причем, чем больше это значение, тем больше шагов будет выводиться.
Например, введем две процедуры, в одной из которых есть ошибка — деление иа нуль: > Е=ргос(х) 1оса1у; у:=1; 9(х,у)! епй: > а:=ргос(п,ч) 1оса1 в,г; я:=0; и=ч1я! я+г епа: Вызовем процедуру Е > Т(З); Еггол Пп Х) гГгчГлоп Ьу сего Установим рбпйече(=100: > рг!пг1ече1:=100: > ((3)! (-> егпегу, агяз = 3 ( — > ел!его, огсз = 3, ! 182 Глава 19 <- ЕЯКОЯ !и я (пов!п () = й«!г!оп Ьу ге«о) < — ЕЯКОК !ау' (пон а! !ор 1е«е!) = с(!«и(оп Ьу ге«о) Есгог, (1п д! г!1«!з(оп Ьу ге«о ехеси!т8 Нагетепг; 1:= «/г !оса!з йе(!пег( азгз = О, ! = ! 1( са!1ег! пп!Ь ат8итеп1зг 3, 1 (са1!еб ««!1Ь агяцгпеп1з: 3 19.2.