Контроль выражений. Приложение имени функции к выражению или его части.
При создании программного обеспечения на языке Mathematica, а иногда и в ходе диалоговой работы с системой необходим контроль за некоторыми свойствами выражений. Следующие функции обеспечивают такой контроль:
- AtomQ [expr] – возвращает True, если выражение ехрг не может быть разложено на подвыражения и является атомарным, и возвращает False в противном случае;
- FreeQ [expr, form] – возвращает значение True, если в выражении ехрr отсутствует подвыражение, совпадающее с form, в противном случае возвращает False;
- FreeQ[expr, form, levelspec] – тестирует только части выражения на уровнях, указанных levelspec.
Следующие примеры показывают действие этих функций.
Ввод (In) | Вывод (Out) |
---|---|
AtomQ [{a | False |
AtomQ[2+3/4] | True |
AtomQ [Sin] | True |
FreeQ[a*x^b,a] | False |
FreeQ [ a*x^ b+c, 1 ] | True |
FreeQ [a*x^b+c, 1.1] | True |
FreeQ[a*x^b+c,b,2]}] | True |
Приложение имени функции к выражению или его части
Функции в системе Mathematica характеризуются именем (обобщенно – f) и выражением ехрг, задающим функциональную зависимость. Обычно функция в ответ на обращение к ней возвращает значение выражения – численное или символьное. Однако в системе Mathematica понятие функции значительно расширено, и она может возвращать любой объект, в том числе графический или звуковой. Можно сказать, что входной язык общения с системой Mathematica основан на принципах функционального программирования с применением полных форм представления выражений.
Следующие функции позволяют прикладывать имя функции к выражению или к частям выражения:
- Apply [f, expr] – замещает заголовок выражения ехрг на f;
- Nest [f, expr, n] – возвращает выражение, полученное и-кратным применением f к ехрг;
- Map [f, expr] – применяет f к каждому элементу на первом уровне в ехрr;
- Map[f, expr, levelspec] – применяет f к частям ехрг, указанным с помощью levelspec;
- MapAll [f, expr] – применяет f ко всем частям выражения ехрг.
Приведем примеры действия этих функций.
Ввод (In) | Вывод (Out) |
---|---|
Apply [f, {a, b, x}] | f [a, b, x] |
Nest[f, x, 3] | f[f[f[x]]] |
s[x_, y_, z_]: = x + y + b | |
N[Apply[s, {1, 2, a}]] | 3. + b |
Map[f, {а, b, с}] | {f[a], f[b], f[c]} |
MapAll [f, a*x + b] | f[f[b] + f[f[a] f[x]]] |
MapAll [f, {а, b, с}] | f[{f[a], f[b], f[c]}] |