Re: Just another Mathematica "Gotcha"

• To: mathgroup at smc.vnet.net
• Subject: [mg120789] Re: Just another Mathematica "Gotcha"
• From: Richard Fateman <fateman at cs.berkeley.edu>
• Date: Wed, 10 Aug 2011 06:46:25 -0400 (EDT)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• References: <j1r5d3\$fi4\$1@smc.vnet.net>

```On 8/9/2011 4:24 AM, AES wrote:
> Seems as if the following two expression should yield the same output
> -- seems that way to me anyway -- but they don't.  I'll hide the
> actual outputs down below so Mathematica gurus (or "ordinary users")
> can make their predictions as to which one does what.
>
> In[1]:= Series[a+(b1+b2)x,{x,0,1}] //Normal /.{b2->0}
>
> In[2]:= Series[a+(b1+b2)x,{x,0,1}] /.{b2->0} //Normal
>
> My conclusions:
>
> 1)  By any normal rules of interpretation or ordinary interpretations
> of these statements, they both should do the same same thing.
>
> 2)  This is just another Mathematica "Gotcha" -- and not a
> particularly forgivable one.

>
> Out[1]= a+(b1+b2) x
>
> Out[2]= a+b1 x
>

The reason is the first form  is parsed as..

Series[a + (b1 + b2) x, {x, 0, 1}] // (  Normal /. {b2 -> 0} )

This is not an error in Series, Normal, or Rule, but a misunderstanding
of the syntax of Mathematica, a natural consequence of its complexity.

Adding parentheses fixes this particular problem:
(    Series[a + (b1 + b2) x, {x, 0, 1}] // Normal  )     /. {b2 -> 0}

A suggestion: never use // .   Or use it only at the very end, e.g.
stuff  //N

Another suggestion.  If ..stuff.. computes the wrong thing, look at
FullForm[ Hold[..stuff..]]

Yet another. Except for the obvious algebraic stuff like a*b+c, maybe
{a,b,c}, :=, and (perhaps) Patterns,   just use FullForm.

RJF

```

• Prev by Date: Re: Some questions about a Mathematica script
• Next by Date: Re: Workbench not updated for version 8?
• Previous by thread: Re: Just another Mathematica "Gotcha"
• Next by thread: Re: Just another Mathematica "Gotcha"