Re: Just another Mathematica "Gotcha"
- To: mathgroup at smc.vnet.net
- Subject: [mg120821] Re: Just another Mathematica "Gotcha"
- From: David Bailey <dave at removedbailey.co.uk>
- Date: Thu, 11 Aug 2011 07:55:22 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <j206sg$775$1@smc.vnet.net>
On 11/08/2011 10:20, Glenn Carlson wrote: > It seems not simply a matter of operator precedence since [7] evaluates to neither [3] nor [6]. > > In[1]:= Series[a + (b1 + b2) x, {x, 0, 1}]; > % // Normal; > % /. {b2 -> 0} > > Out[3]:= a+b1 x > > In[4]:= Series[a + (b1 + b2) x, {x, 0, 1}]; > % /. {b2 -> 0}; > % // Normal > > Out[6]:= a+b1 x > > In[7]:= Series[a + (b1 + b2) x, {x, 0, 1}] // Normal /. {b2 -> 0} > > Out[7]:= a + (b1+b2) x > The best way to explore operator precedence is to wrap the whole expression in Hold and FullForm: FullForm[Hold[ Series[a + (b1 + b2) x, {x, 0, 1}] // Normal /. {b2 -> 0} ]] Hold[ReplaceAll[Normal,List[Rule[b2,0]]][Series[Plus[a,Times[Plus[b1,b2],x]],List[x,0,1]]]] This shows you that because of the precedence rules, the replacement rule ends up acting on the function Normal - and so does absolutely nothing. Incidentally, FullForm, sometimes in combination with Hold, solves a great many mysterious Mathematica problems! David Bailey http://www.dbaileyconsultancy.co.uk