Образцы и их применение
Образцы (patterns) в системе Mathematica служат для задания выражений различных классов и придания переменным особых свойств, необходимых для создания специальных программных конструкций, таких как функции пользователя и процедуры. Это необычайно гибкое и мощное средство обобщенного представления математических выражений, используемое при любом подходе к программированию.
Признаком образца являются знаки подчеркивания "_" (от одного до трех). Они обычно выглядят слитно, так что надо внимательно следить за общей длиной символов образцов. Наиболее распространенное применение образцов – указание на локальный характер переменных при задании функций пользователя. Например, функция:
fsc[x_, y_] :
=
x
*
Sin[y]
+
y
*
Cos[x]
+
z
В списке параметров содержит два образца, х_ и у_. В правой части этого выражения переменные х и у, связанные с образцами х_ и у_, становятся локальными переменными, тогда как переменная z будет глобальной переменной. Обратите особое внимание на то, что символы образцов используются только в списках параметров – в правой части выражений они уже не применяются.
Образцами можно задавать некоторые общие свойства функций. Например, запись:
f[x_, x_] :
=
p[x]
Означает, что функция f двух идентичных аргументов становится тождественной функции р [ х ]. Следовательно, вызов функции:
f[a, a]
+
f[a, b]
Даст выход в виде:
f[a, b]
+
p[a]
А при вызове:
f[a
^
2
-
1
, a
^
2
-
1
]
Будет получен результат:
p[
-
1
+
a
^
2
]
Примеры применения образцов для задания функции вычисления факториала приводились выше. В образце можно указывать его тип данных:
- x_Integer – образец целочисленный;
- x_Real – образец с действительным значением;
- x_Complex – образец с комплексным значением;
- x_h – образец с заголовком h (от слова head – голова).
Задание типов данных с помощью образцов делает программы более строгими и наглядными и позволяет избежать ошибок, связанных с несоответствием типов.
В системе Mathematica используются следующие типы образцов.
Обозначение | Назначение образца |
---|---|
Любое выражение | |
x_ | Любое выражение, представленное именем х |
:: pattern | Образец, представленный именем х |
pattern? test | Возвращает True, когда test применен к значению образца |
_h | Любое выражение с заголовком h |
x_h | Любое выражение с заголовком h, представленное именем х |
Любая последовательность с одним и более выражений | |
Любая последовательность с нулем или более выражений | |
:x_< ИЛИ х__ | Последовательности выражений, представленные именем х |
_h или h__ | Последовательности выражений, каждое с заголовком h |
x _ h или х__h | Последовательности выражений с заголовком h, представленные именем х |
x_:v | Выражение с определенным значением v |
x_h:v | Выражение с заголовком h и определенным значением v |
x_. | Выражение с глобально заданным значением по умолчанию |
Optional [x h] | Выражение с заголовком h и с глобально заданным значением по умолчанию |
Pattern.. | Образец, повторяемый один или более раз |
Pattern… | Образец, повторяемый ноль или более раз |
Еще раз отметим, что символ "_" в образцах может иметь одинарную, двойную или тройную длину. Надо следить за правильностью его применения, поскольку эти варианты различаются по смыслу. Образцы широко применяются при задании функций пользователя и в пакетах расширения системы.