Такой баголовок такого Злога.

четверг, 27 июля 2006 г.

Введение в шаблоны

Шаблоны используются для выделения классов выражений.

Самый общий шаблон имеет вид _, соответствующий класс состоит из всех выражений «Математики». Например, шаблон _^_ соответствует форме 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}

Наверное, для одной статьи информации достаточно: опытным пользователям может стать скучно, а новичкам уже есть над чем подумать.

Примите и проч.

Комментариев нет: