Thanks to all who have replied to my questions regarding the `&`-
type operators in Maple.
Your comments and suggestions have been very helpful.
In return, let me show you my code of an multilinear operator `&t`
which is also
left-associative. It gives the basic structure of a tensor product of orthogonal Clifford
algebras. It is part of a small extension package G[raded] T[tensor] P[roduct] to my
’CLIFFORD’ package to enable computations in graded tensor products of orthogonal
Clifford algebras. These algebras are Z2-graded and their graded tensor products are
Z2-isomorphic to orthogonal Clifford algebras in higher dimensions. These strange types
tensorprod, clipolynom, cliscalar are defined in the two packages.
If anyone is interested in these packages, please e-mail me.
GTP[`&t`]:= proc(a1::{`*`,`+`,tensorprod,clipolynom,cliscalar},a2::{cliscalar,clipolynom}) local co,a11,a22,p,i; if nargs<2 then ERROR(`at least two arguments are needed`) fi; if nargs>2 then RETURN(`&t`(`&t`(args[1..2]),args[3..nargs])) fi; if type(a1,`+`) then RETURN(map(`&t`,a1,a2)) elif type(a2,`+`) then RETURN(map2(`&t`,a1,a2)) fi; if type(a1,`*`) and hastype(a1,tensorprod) then a11:=select(type,a1,tensorprod): co:=remove(type,a1,tensorprod): RETURN(co*(`&t`(a11,a2))) fi; if type(a1,`*`) and not hastype(a1,tensorprod) then a11:=select(type,a1,clibasmon): co:=remove(type,a1,clibasmon): RETURN(co*(`&t`(a11,a2))) elif type(a2,`*`) and not hastype(a2,tensorprod) then a22:=select(type,a2,clibasmon): co:=remove(type,a2,clibasmon): RETURN(co*(`&t`(a1,a22))) fi; p:=args[1];for i from 2 to nargs do p:='`&t`'(p,args[i]) od; RETURN(p); end: