Re: Replace in an elegant way

*To*: mathgroup at smc.vnet.net*Subject*: [mg122877] Re: Replace in an elegant way*From*: "Oleksandr Rasputinov" <oleksandr_rasputinov at hmamail.com>*Date*: Mon, 14 Nov 2011 07:06:13 -0500 (EST)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*References*: <j9o3hc$o$1@smc.vnet.net>

On Sun, 13 Nov 2011 09:44:12 -0000, Mirko <dashiell at web.de> wrote: > Hi all, > I have following equation: > > ((1 + theta[m])^2)/(1 - m) - lambda*((theta[m] + ((lambda + m - > lambda*m)*(1 + theta[m])*(1 + theta[m] - lambda*theta[m]))/(1 - m) + > (m*Derivative[1][theta][m])/lambda)) > > I want to replace all m that are not an argument of theta[m] or the > Derivative. However, if I use > /., it replaces all m. If I use Replace[expr,m->qq] it doesn't replace > anything. (qq is the one I want to replace with). If I specify any > level, it doesn't change anything, unless I use -1, but then I replace > everything. > > Do you know how I solve this problem? > Right now I use: > //. Derivative[y_][theta][m] -> Derivative[y][theta][dd] //. > theta[m] -> theta[dd] /. m -> qq //. > Derivative[y_][theta][dd] -> Derivative[y][theta][m] //. > theta[dd] -> theta[m] > > but this is not elegant at all (and takes slightly longer). > While still inelegant (since it contains replacements of items with themselves), the following is something of an improvement over your existing method: expr /. { deriv : Derivative[__][theta][m] :> deriv, arg : theta[m] :> arg, m -> qq }