Ну, в простом случае я до этого догадаюсь. А для всяких штук типа

c полиномами

придётся учиться писать что-то (рекурсивное) вроде
Код:
proc F(expr,vars)
if type(expr,`*`) then
result:=1;
for i from 1 by 1 to nops(expr) do
result:=result*F(op(i,expr),vars);
od;
elif type(expr,`^`) then
result:=F(op(1,expr),vars)^op(1,expr);
elif ...
...
fi;
result
end