Re: Simplify last version
- To: mathgroup at smc.vnet.net
- Subject: [mg14924] Re: [mg14868] Simplify last version
- From: Jurgen Tischer <jtischer at col2.telecom.com.co>
- Date: Wed, 25 Nov 1998 17:48:44 -0500
- Organization: Universidad del Valle
- References: <E1168E31432DD211AF990000F806EFD82E667A@nems04.nawcad.navy.mil>
- Sender: owner-wri-mathgroup at wolfram.com
Thanks, Ted. I want to point out that this was my error, not Allan's. Jurgen "Ersek, Ted R" wrote: > > Jugen Tischer posted the following solution by Allan Hayes, > > > > > > >expr =(-7253*2^(1 + 2*n)*5^n - 523*4^n*5^(1 + n) + 17121*20^n + > >130321*20^n*n^4)/130321 > > > >simpl[expr_] := > > Simplify[Factor[ > > expr /. (x_Integer)^(k_) :> > > Times@@(C[#1[[1]]]^(k #1[[2]]) &)/@FactorInteger[x]] /. > > C[x_] -> x] > > > >simpl[expr] > > > >20^n n^4 > > > > > > Nice solution. However, using patterns on the left side Rule(->) may give > you a result you don't want. Consider the following. > > In[6]:= > x=123; > > ... > ... > ... > > We still have a global value for (x). > In[86]:= > {C[10],C[20],C[30]}/.C[x_]->x > Out[86]= > {123,123,123} > We didn't get what we wanted for Out[86]. > > Instead used RuleDelayed (:>) as below. > In[87]:= > {C[10],C[20],C[30]}/.C[x_]:>x > Out[87]= > {10,20,30} > That's better. > > If you absolutely must use a pattern on > the left side of (->), do so inside a block as below. > In[88]:= > x=145; > Block[{x},{C[10],C[20],C[30]}/.C[x_]->x] > Out[88]= > {10,20,30} > That works too. > > _________________________ > > With that said I recommend the following over the solution above. > > simpl[expr_] := > Simplify[Factor[ > expr /. (x_Integer)^(k_) :> > Times@@(C[#1[[1]]]^(k #1[[2]]) &)/@FactorInteger[x]] /. > C[x_] :> x] > > _________________________ > > Note: > Set, UpSet, and TagSet have the same trouble that Rule does (shown above) > with patterns on the left side. > > Cheers, > Ted Ersek