Допустимые языком базовые бинарные операторы представлены в следующей табл. 3.
Таблица 3
Оператор | Смысловая нагрузка: | Оператор | Смысловая нагрузка: |
+ | сложения | < | меньше чем |
- | вычитания | <= | меньше чем или равно |
* | умножения | > | больше чем |
/ | деления | >= | больше чем или равно |
{**|^} | степени | = | равно |
:= | присваивания | <> | не равно |
:- | выбора элемента модуля | , | разделитель выражений |
$ | последовательности | -> | функциональный |
@ | композиции функций | mod | взятие модуля |
@@ | кратной композиции | union | объединение множеств |
:: | определения типа | minus | разность множеств |
&<строка> | нейтральный инфексный | intersect | пересечение множеств |
|| | конкатенации строк | and | логическое И |
.. | ранжирования | or | логическое ИЛИ |
С большинством из приведенных в табл. 3 унарных операторов читатель должен быть хорошо знаком, тогда как такие как (:=, $, @, @@, ..) в определенной мере специфичны для математически ориентированных языков и будут рассмотрены ниже. По остальным же пояснения будут даваться ниже по мере такой необходимости.
Наконец, три нульарных оператора %, %% и %%% (один, два и три знака процентов) представляют специальные идентификаторы Maple-языка, принимающие в качестве значений результат вычисления соответственно последнего, предпоследнего и предпредпоследнего предложения. Следующий фрагмент иллюстрирует применение нульарных операторов:
> AG:= 59: AV:= 64: AS:= 39: (%%+3*%+%%%-2); ⇒ 238
> P:=proc() args; nargs; %, %% end proc: P(59, 64, 39, 17, 10, 44); ⇒ 6, 59, 64, 39, 17, 10, 44
Как правило, нульарные операторы используются в интерактивном режиме работы с пакетом и выступают на уровне обычных переменных, позволяя обращаться к результатам предыдущих вычислений на глубину до трех. Однако использование их вполне допустимо и в теле процедур, где они выступают на уровне локальных переменных, как это иллюстрирует второй пример фрагмента. Вопросы организации процедур рассматриваются ниже. Наряду с возможностью использования {%|%%|%%%}-конструкции для доступа к результатам предыдущих вычислений в текущем сеансе работы языком предоставляется history-механизм обращения к любому полученному в рамках его истории вычислению. Детально данный механизм рассмотрен в нашей книге [12]. В частности, там же представлен и анализ данного механизма, говорящий о недостаточно продуманной и реализованной системе, обеспечива-ющей history-механизм; в целом весьма полезного средства, но при наличии существенно более широких возможностей, подобных, например, пакету Mathematica [6,7], где подобный механизм представляется нам намного более развитым.
Приоритетность операторов Maple-языка в порядке убывания определяется как:
|| :- :: % & ! {^, @@} { ., *, &*, /, @, intersect} {+, -, union, minus} mod subset
.. {<, <=, >, >=, =, <>, in} $ not and or xor implies -> , assuming :=
В качестве строк Maple-язык рассматривает любые последовательности символов, кодируемые в верхних двойных кавычках ("), например: "Академия Ноосферы". При этом, составлять строку могут любые допустимые синтаксисом языка символы. При необходимости поместить в строку верхнюю двойную кавычку ее следует дублировать либо вводить комбинацией вида (\"). Это же относится и к ряду других символов, вводимых посредством обратного слэша (\), как это иллюстрирует следующий весьма простой фрагмент:
> `Строка`:= "Международная Академия Ноосферы"; Строка:= "Международная Академия Ноосферы"
> `Строка 1`:= "Международная\nАкадемия\nНоосферы";
Строка 1 := "Международная
Академия
Ноосферы"
> `Строка 2`:= "Internatio\nal Academy of Noosphere"; Строка 2 := "Internatio nal Academy of Noosphere"
> `Строка 3`:= "Российская Эколо"гическая Академия";
Error, missing operator or `;`
Однако, как иллюстрируют примеры фрагмента, если наличие в строке одинарной двойной кавычки (помимо ограничивающих) вызывает синтаксическую ошибку, то для случая обратного слэша в общем случае могут возникать семантические ошибки. Максимальная длина строки зависит от используемой платформы: для 32-битных ЭВМ - 524271 символов, а для 64-битных - 34359738335 символов. О средствах работы со строчными структурами детальнее речь будет идти несколько ниже.
В качестве символов Maple-язык рассматривает любые последовательности символов, в общем кодируемые в верхних обратных кавычках (`), например: `Академия Ноосферы 64`. При этом, составлять символ могут любые допустимые синтаксисом языка символы. При необходимости поместить в символ верхнюю обратную кавычку ее следует дублировать либо вводить комбинацией вида (\`). Это же относится и к ряду других символов, вводимых посредством обратного слэша (\), как это иллюстрирует фрагмент:
> `Строка`:= `Международная Академия Ноосферы`; Строка:= Международная Академия Ноосферы > `Строка 1`:= `Международная\nАкадемия\nНоосферы`; Строка 1 := Международная Академия Ноосферы > `Строка 2`:= `Internatio\nal Academy of Noosphere`; Строка 2 := Internatio nal Academy of Noosphere > `Строка 3`:= `Российская Эколо`гическая Академия`; Error, missing operator or `;` |
Сразу же следует отметить одно принципиальное отличие строк от символов Maple-языка. Если символам можно присваивать значения, то строки такой процедуры не допус- кают, вызывая ошибочные ситуации, например:
> "Данные":= 2006;
Error, invalid left hand side of assignment
> Данные:= 2006: `Результат`:=350: Данные, Результат;
2006, 350
При этом, если символ не содержит специальных знаков, то его можно кодировать и без ограничивающих его обратных одинарных кавычек, как иллюстрирует второй пример.
В качестве натурального целого язык рассматривает любую последовательность из одной или более десятичных цифр, при этом все ведущие нули игнорируются, т.е. 005742 рассматривается как 5742. Длина таких чисел зависит от используемой пакетом платформы и на большинстве 32-битных ЭВМ составляет порядка 524280 десятичных цифр, тогда как на 64-битных она достигает уже 38654705646 цифры. В качестве целого рассматривается натуральное целое со знаком или без. Для работы с арифметикой целых чисел язык располагает достаточно развитыми средствами, рассматриваемыми ниже.
Наконец, знаки пунктуации Maple-языка представлены в следующей табл. 4.
Таблица 4
Знак пунктуации: | Смысловая нагрузка: |
; и : | точка с запятой и двоеточие |
( и ) | левая и правая круглые скобки |
< и > | левая и правая угловые скобки |
{ и } | левая и правая фигурные скобки |
[ и ] | левая и правая квадратные скобки |
" | двойная верхняя кавычка |
| | вертикальный разделитель |
` ' , . | кавычка, апостроф, запятая и точка |
Представим использование Maple-языком указанных в табл. 4 знаков пунктуации:
: и ; - служат для идентификации конца предложений Maple-языка; различия между ними обсуждаются ниже;
( ) - для группировки термов в выражениях, а также формальных или фактических аргументов при определениях или вызовах функций/процедур;
<> - для определенной пользователем группировки выражений;
{} - для определения структур данных типа множество;
[] - для определения структур данных типа список, а также для образования индек- сированных переменных и оператора выбора элемента из индексированных вы- ражений;
` ' , - соответственно для определения идентификаторов, невычисляемых выражений и структур типа последовательность; при этом, следует четко различать при коди- ровании конструкций Maple-языка символы верхней обратной кавычки (96) и апо- строфа (39), в скобках даны их десятичные коды по внутренней кодовой таблице; " - верхние двойные кавычки служат для определения строчных структур данных.