* Данный текст распознан в автоматическом режиме, поэтому может содержать ошибки
Язык программирования систем Mathematica
1069
Возможно также рекурсивное программирование, при котором очередной шаг вычислений базируется на данных, полученных на предыдущих шагах. На глядным примером этому может служить вычисление факториала рекурсив ным методом. Поскольку алфавит языка программирования системы и набор операторов и функций уже были рассмотрены ранее, в этой главе нам остается рассмотреть лишь специфические средства языка и его управляющие структуры.
14.3.2. Образцы и их применение
Образцы в системе Mathematica служат для задания выражений различных клас сов и придания переменным особых свойств, необходимых для создания специаль ных программных конструкций, таких как функции пользователя и процедуры. Признаком образца являются знаки подчеркивания «_» (от одного до трех). Они обычно выглядят слитно, так что надо внимательно следить за общей длиной сим волов образцов. Наиболее распространенное применение образцов – указание на локальный характер переменных при задании функций пользователя. Например, функция
fsc[x_,y_]:= x * Sin[y] + y * Cos[x] + z
в списке параметров содержит два образца x_ и y_. В правой части этого выраже ния переменные x и y, связанные с образцами x_ и y_, становятся локальными переменными, тогда как переменная z будет глобальной переменной. Обратите особое внимание на то, что символы образцов используются только в списках па раметров – в правой части выражений они уже не используются. Образцами можно задавать некоторые общие свойства функций. Например,
f[x_,x_] := p[x]
означает, что функция f двух идентичных аргументов становится тождественной функции p[x]. Следовательно:
f[a,a] + f[a,b]
даст выход в виде:
f[a,b] + p[a],
a
f[a^2 – 1, a^2 – 1]
даст выход
p[-1 + a^2]
Вообще говоря, вычисление таких функций, как факториал, в Mathematica можно запрограммировать более чем десятком способов. Вот несколько самых интересных реализаций этой функции:
f[n_]:=n! f[n_]:=Gamma[n-1] f[n_]:=n*f[n-1];f[0]=1;f[1]=1;