3.1.10. Применение функциональных операторов
Нотация | Запись оператора |
---|---|
«arrow» (стрелочная) | vars -> result |
«angle bracket» (в угловых скобках) | <result | vars> |
Данные операторы могут использоваться для реализации подстановок. Например, запись х->х^2 означает подстановку х^2 на место переменной х. Возможны и такие подстановки в множественной форме:
(х,у) -> x^2 + у^2
х -> (2*х, 3*х^4)
(х,у,z) -> (х*у, y*z)
Функциональный оператор в Maple часто используется для задания функций пользователя, которое будет рассмотрено несколько позднее.
3.1.11. Определение нейтральных операторов
Для создания
&name
Имя оператора строится по правилам задания допустимых идентификаторов. Также в качестве имени может быть использована последовательность (один и более) специальных символов. В последовательности специальных символов не должно быть букв, цифр, подчеркивания, а также следующих символов:
& | (){}[]:;'` # <перевод строки> <пробел>
Максимальная длина имени — 495 символов. Нейтральные операторы могут быть унарными и бинарными. Примеры задания бинарного нейтрального оператора приведены ниже:
> х&/у;
> z+x&/y;
> &/(х, у);
> х&/у-&/(х,у);
3.1.12. Определение операторов с помощью оператора define
Большие возможности для создания операторов с заданными свойствами предоставляет специальный оператор define. Он записывается в следующей форме:
define(oper, property1, property2, ...)
Здесь oper — имя определяемого оператора, property1, property2 и т.д. — наименования свойств. В принципе оператор define позволяет создавать операторы с новыми свойствами, которые отсутствуют у операторов и функций, встроенных в систему. Могут быть указаны следующие свойства операторов:
unary — унарный оператор;
binary — бинарный оператор;
diff — дифференциальный оператор;
linear — линейный оператор;
multilinear — множественный линейный оператор;
flat — ассоциативный оператор, для которого f(х,f(y,z)) = f(f(х, y),
orderless — коммутативный симметричный оператор, такой что f(х, y) =
identity — единичный оператор (например, M:=Matrix(3,3,shape=identity) задает единичную матрицу).
Следующий пример задает линейный оператор L:
> define(L,linear);
> L(а*х+b*х^2+с*х^3);
Для задания некоторых свойств операторов можно использовать уравнения и соотношения вида f (x)=value. Чтобы свойство выполнялось для всех аргументов (или некоторого класса аргументов), используется описание forall. Так, приведенный ниже пример задает оператор F, который вычисляет
> restart;
> define(fib,fib(0)=1,fib(1)=1,fib(n::posint)=fib(n-1)+fib(n-2));
> fib(6);
> fib(10);
> fib(20);
Обратите внимание на то, что соотношения fib(0)=1 и fib(1)=1 задают начальные значения целочисленного массива чисел Фибоначчи, которые нужны для реализации обычного итерационного алгоритма их нахождения — напоминаем, что очередное число Фибоначчи равно сумме двух предшествующий чисел Фибоначчи.