Шаблоны используются для выделения классов выражений.
Самый общий шаблон имеет вид _, соответствующий класс состоит из всех выражений «Математики». Например, шаблон _^_ соответствует форме x^y, где x и y – любые выражения.
f[_^_,_] := p;
{f[a^a,a], f[a^b,c], f[some^2, thing]}
{p,p,p}
Шаблон _ можно снабдить именем, и тогда шаблон становится именованным. Именованный шаблон имеет вид name_.
x^n_ – x в любой степени n
x_^n_ – любое выражение в любой степени
a_ + b_ – сумма двух выражений
{x1_ ,x2_} – список из двух выражений
f[n_, n_] – функция с двумя одинаковыми аргументами
Пример функции, которая получает список из двух элементов и возводит первый элемент этого списка в степень, показателем которой является второй элемент:
h[{x_,y_}] := x^y
Кроме того, можно указать заголовок шаблона в форме _head. Заголовок существенно снижает класс выражений. Так, шаблон _Integer выделяет класс атомарных выражений, являющихся целыми числами.
x_Complex – комплексное число
x_List – список
x_Real – вещественное число
Пример функции, определенной только для целых чисел:
g[n_Integer] := (n-1)!
Кроме шаблонов, основу которых составляет подчёркивание _, имеются шаблоны вида _ _ – двойное подчеркивание и тройное подчёркивание_ _ _.
Двойное подчёркивание выделяет класс выражений, состоящих из одного или из нескольких выражений, разделённых запятыми. Тройное подчёркивание выделяет класс, состоящий из нуля или из нескольких выражений, разделённых запятыми.
f1[x__] := Length[{x}]^2;
g1[x___] := Length[{x}]^2;
(* Обратите внимание на то, что первая функция списка осталась невычисленной, *)
(* поскольку f1 определена только для ненулевого количества аргументов *)
{f1[], f1[a], f1[a,b], f1[a,b,c]}
{f1[],1,4,9}
{g1[], g1[a], g1[a,b], g1[a,b,c]}
{0,1,4,9}
Наверное, для одной статьи информации достаточно: опытным пользователям может стать скучно, а новичкам уже есть над чем подумать.
Примите и проч.
Комментариев нет:
Отправить комментарий