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