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

 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