Элементами составных математических объектов являются числа, имена выражения и любые другие объекты. В качестве основных составных объектов в Maple используют: последовательности, множества, списки, таблицы и некоторые другие. Например:
1. последовательности (exprseq)
> s:= 1,4,9,25;
> t:= sin, cos, tan;
> whattype(s);
Пустая последовательность обозначается NULL. Последовательности ассоциативны, т.е. складываются
> s:=1,(4,9,16),25;
> t:=s,s;
Наиболее эффективный путь создания последовательностей - это применение специальной функции seq (не применяйте для этого циклы, данная команда более эффективна, так как не создает промежуточных последовательностей). Например:
> s:=seq( i^2, i=1..5 );
С другой стороны
> s:=NULL; for i from 1 to 5 do s:=s,i^2 od;
Как видим, цикл работает медленее и занимает больше памяти. Другие примеры:
> seq( x[i], i=1..5 );
> a:=38*x^2+y*x-11;
> seq(coeff(a,x,i),i=0..degree(a,x));
> seq(D(f),f=[sin,cos,tan,exp,ln]);
2. множества ( set )
> s:={x,1,1-z,x};
> whattype(s);
Как мы видим, в множестве не может быть одинаковых элементов. Пустое множество обозначается {}. Для работы с множествами используют команды union, intersect, minus:
> {a,b} union {b,c};
> {a,b} intersect {b,c};
> {a,b} minus {b,c};
> a union b union a;
> {3,4} union a union {3,7};
> `union`({3,4},a,{3,7});
3. списки ( list )
Списки отличаются от множеств тем, что в них могут присутствовать одинаковые элементы
> List:=[x,1,1-z,x];
> whattype(List);
> [x,y,y];
> [y,x,y];
Заметим, что это разные списки! Для создания списков и множеств можно использовать команду seq, это эффективнее, чем применение циклов.
> L := [seq(x[i],i=1..4)];
> L[2];
Для добавления элемента в список
> L := [op(L),x[5]];
Для выделения части списка
> L[-3..-2];
Для сокращения списка (выбрасываем второй элемент)
> L := subsop(2=NULL,L);
Список также может состоять из списков
> L:=[[1,2],[3,4,5]];
Элементами множеств и списков могут быть так же сами множества или списки.
Для работы с множествами и списками используют следующие логические операторы:
· member
· has
· convert
> member(y, {x, y, z});
> member(y, {x*y, y*z});
> member(x*y, [x*y, w+u, y]);
> member(w, [x, y, w, u], 'k'); k;
В последнем примере мы присвоили переменной k номер элемента w в данном списке. Аналог данной команды для выражений:
> f := (a+b^3+c)^(4/3);
> has( f, a );
> has( f, b^3 );
> has( f, b^2 );
> has( f, a+b^3+c );
> has( f, a+c );
> has( f, {c,d} );
> has( f, {d,e} );
Оператор преобразования
> convert( [1,2,3,4], `+` );
> f := seq( x[i]^i, i=1..4 );
> convert([f], `*`);