Базовые элементы
В Maple-языке существует целый ряд других слов, имеющих специальный смысл, например идентификаторы (имена) функций и типов, однако пользователь может использовать их в программах в определенных контекстах. При этом, защита их от модификации обеспечивается совершенно иным механизмом.
Операторы языка относятся к трем типам: бинарные, унарные и нульарные. Допускаемые языком унарные операторы представлены в следующей табл. 2.
| Ключевые слова: | Смысловая нагрузка: |
| + |
префиксный плюс
|
| - |
префиксный минус
|
| {!|factorial} |
факториал (постфиксный оператор)
|
| & |
префиксный оператор последовательности
|
| . |
десятичная точка (префиксный или постфиксный)
|
| %<целое> |
оператор метки
|
| not |
префиксный логический оператор отрицания
|
| & |
префиксный пользовательский оператор
|
Унарные операторы (+, -, not) и десятичная точка (.) имеют вполне прозрачный смысл и особых пояснений не требуют. Здесь мы кратко остановимся на операторе метки (%); при этом понятие метки в Maple-языке существенно иное, чем для традиционных языков программирования. Унарный оператор метки кодируется в виде %<целое> и служит для представления общих подвыражений большого выражения в целях более наглядного представления второго. Данный оператор используется Maple-языком для вывода выражений на экран и на принтер в удобном виде. После возвращения языком представленного в терминах %-оператора выражения к переменным %<целое> можно обращаться как к обычным определенным переменным. Для возможности использования представления выражений в терминах %-оператора используются две опции interface-переменной оболочки пакета: labelling и labelwidth, определяющих соответственно допустимость такого представления и длину меченных подвыражений. При этом, данная возможность допустима не для всех форматов Output-параграфа текущего документа.
Допустимые языком базовые бинарные операторы представлены в следующей табл. 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-механизм обращения к любому полученному в рамках его истории вычислению. Детально данный механизм рассмотрен в нашей книге. В частности, там же представлен и анализ данного механизма, говорящий о недостаточно продуманной и реализованной системе, обеспечива-ющей history-механизм; в целом весьма полезного средства, но при наличии существенно более широких возможностей, подобных, например, пакету Mathematica, где подобный механизм представляется нам намного более развитым.