# expand to exp(x);

expandexp(a_+b_) := expandexp(a)+expandexp(b);
expandexp(a_-b_) := expandexp(a)-expandexp(b);
expandexp(a_*b_) := expandexp(a)*expandexp(b);

expandexp(gamma(n_,x_)) := If(n>0.5, (n-1)*expandexp(gamma(n-1,x))+x^(n-1)*exp(-x),
	If(n < -0.5, (expandexp(gamma(n+1,x))-x^n*exp(-x))/n ));
expandexp(En(n_,x_)) := If(n>0.5, (-x*expandexp(En(n-1,x))+exp(-x))/(n-1),
	If(n< -0.5, -n*expandexp(En(n+1,x))/x+exp(-x)/x ));
expandexp(li(n_,x_)) := If(n>=1, -n*li(n-1,x)+ln(x)^n*x,
	If(n<-1, (-li(n+1,x)+ln(x)^(n+1)*x)/(n+1) ));
expandexp(exp(a_+b_)):= exp(a)*exp(b);
expandexp(e^(a_+b_)):= e^(a)*e^(b);
expandexp(e^(i*x_)):= cos(x)+i*sin(x);
expandexp(e^(-i*x_)):= cos(x)-i*sin(x);