Mathematica/Описание языка
Язык программирования Mathematica
правитьКроме того, Mathematica это интерпретируемый язык функционального программирования. Mathematica допускает отложенные вычисления с помощью оператора определения «:=
».
Можно сказать, что система Mathematica написана на языке Mathematica, хотя некоторые функции, особенно относящиеся к линейной алгебре, в целях оптимизации были написаны на языке C.
Функциональное программирование
правитьПример кода, который последовательно 5 раз применяет функцию f
:
NestList[f, x, 5]
Результатом будет список из аргумента x
, одного, двух, трёх и так далее до пяти применений функции f
к этому аргументу, всего 6 элементов списка:
{x, f[x], f[f[x]], f[f[f[x]]], f[f[f[f[x]]]], f[f[f[f[f[x]]]]]}
Пример 3-х кратного применения конкретной функции Sin[x + 1]
имеет вид:
NestList[Sin[# + 1] &, x, 3]
Результатом будет:
{x, Sin[1 + x], Sin[1 + Sin[1 + x]], Sin[1 + Sin[1 + Sin[1 + x]]]}
Процедурное программирование
правитьMathematica также поддерживает процедурный стиль программирования:
For[i = 1; t = x, i^2 < 10, i++,
t = t^2 + i;
Print[t]]
Точка с запятой отделяет различные последовательные команды. Для осуществления стандартных циклов есть функции Do, While, For. Условные выражения осуществляются посредством функций If, Which, Switch. Таким образом, будучи изначально функциональным языком программирование Mathematica, тем не менее, имеет функции, которые позволяют писать код очень близкий к стандартным процедурным языкам программирования.
Программирование посредством задания правил
правитьВ системе Mathematica также можно задавать правила работы с теми или иными выражениями. Таким образом, можно определять объекты подобно тому как это обычно делается в математике, задавая их свойства посредством правил:
f[x_ + y_] := f[x] + f[y];
f[a + b + c]
Результат:
f[a] + f[b] + f[c]
Объектно-ориентированное программирование
правитьMathematica позволяет и явно задавать определения, связанные с определённым объектом, реализуя тем самым возможность использования объектно-ориентированного стиля программирования:
h /: f[h[x_], x_] := hf[x];
h /: p_[h[x_]] := ph[f, x];
h /: h[x_] + h[y_] := hsum[x, y];
Вычисляя (с данными определениями):
h[a] + h[b] + p[h[r]] + h[h[x]]
результатом будет:
hsum[a, b] + ph[f, r] + ph[f, x]