map
- очень полезная команда, она позволяет применить
функцию к каждому из элементов списка, набора или
к операндам верхнего уровня выражения. Если
команда применена к списку, то ее результатом
оказывается список функций, примененных к
каждому из элементов списка в том же порядке, в
котором они расположены в списке. Применим
команду map, в аргументе которой первым
параметром поставим некоторую функцию f, а вторым
список [a,b,c]:
> map(f,[a,b,c]);
Мы видим, что команда map направляет
действие функции на каждый из элементов списка.
Если, например, функция f возводит в квадрат, то
> map(x->x^2,[a,b,c]);
В команду map возможно также введение
третьего и последующих параметров. В этом случае
функция также превратиться в список функций от
соответствующего числа параметров, причем
параметры аргумента команды, стоящие за вторым
добавляются вслед за параметром списка в
аргументы каждой из списка функций.
> map(f,[a,b,c],p,q);
Существует также команда map2
, в которой список элементов является третьим
аргументом, а вторым - дополнительный элемент.
Эта команда также применяет функцию к каждому из
элементов списка, однако дополнительный элемент
располагается перед параметром списка в
аргументы каждой из списка функций.
> map2(f,p,[a,b,c]);
Эта команда также позволяет вводить
дополнительные параметры вслед за
параметром-списком, которые помещаются в
аргументы результирующего списка функций вслед
за элементами списка:
> map2(f,p,[a,b,c],q,r);
В качестве примера функции от двух
параметров приведем операцию дифференцирования
> map(diff,[(x+1)*(x+2),x*(x-1)],x);
Команда map2 посылает элементы списка
на второй параметр аргумента команды diff,
что позволяет получить список производных по
каждой из трех переменных списка.
> map2(diff,x^y/z,[x,y,z]);
Сама функция, являющаяся первым
параметром аргумента команды map может быть
списком или набором функций. В этом случае все
функции данного набора применяются к
последующим параметрам аргумента команды.
> map({[a,b],[c,d],[e,f]},p,q);
> map2(map,{[a,b],[c,d],[e,f]},p,q);
На следующем примере показано, как
команда map направляет функцию на операнды
выражения верхнего уровня
> map(f,(x+y)/sin(z));
Те же преобразования, которые выполняет
команда map возможны также при помощи команды seq
.
> seq(f(i),i={a,b,c});
> seq(f(p,i,q,r),i=[a,b,c]);
> seq(diff(j,x),j=[(x+1)*(x+2),x*(x-1)]);
> seq(diff(x^y/z,k),k=[x,y,z]);
Еще одна очень полезная команда add() , которая позволяет применять
функцию к элементам списка с последующим
суммированием.
> add(i^2,i=[5,y,sin(x),-5]);
> L := [seq(i, i=1..5)];
> add( (x+i)^2, i=L );
Аналогичная команде add команда mul выполняет умножение.
> mul( x-i, i=L );
|