MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Just another Mathematica "Gotcha", and HoldForm bug

  • To: mathgroup at
  • Subject: [mg120796] Re: Just another Mathematica "Gotcha", and HoldForm bug
  • From: Richard Fateman <fateman at>
  • Date: Thu, 11 Aug 2011 05:09:42 -0400 (EDT)
  • Delivered-to:
  • References: <j1r5d3$fi4$> <j1tnpf$pnu$>

Why one might be confused

In[6]:= A + B /. x_ -> M[x]
Out[6]= M[A + B]

In[7]:= A + B // M
Out[7]= M[A + B]

In[8]:= A + B /. x_ -> M[x] // F
Out[8]= F[M[A + B]]

In[9]:= A + B // M /. x_ -> F[x]
Out[9]= F[M][A + B]

Note the identicality of Out[6] and Out[7].
Note that Out[8] and Out[9] are different.

Since neither //  nor /. are "traditional" mathematical
syntax, one's intuition may be unreliable. Simple examples
such as 6,7 above, might lead one to believe they have
equal precedence and are treated nominally from left to right.

Reading up on the details by looking at Mathematica's
description of syntax and operator precedence is difficult,
since it is simultaneously daunting and incomplete.
One is therefore left with experimentation. Simple experiments
are not enough, though, as shown by 6, which suggests that
/. applies rule(s) to everything to the left, and 7 which
suggests that // applies an operator to everything
to the left.  Both of these are false. See a=b/.f;  a=b//f.

In looking at examples, I think I found a bug, but maybe
it is a feature?

Did you know that

HoldForm[x //@ y]      returns  x//@y
HoldForm[x //  y]      returns  y[x]

(version 7.0).

While it is easy to place blame on "user error", I think "design error"
contributes to difficulties as well.


  • Prev by Date: Re: Print Magnification?
  • Next by Date: Re: Getting TraditionalForm to put in a multiplication sign.
  • Previous by thread: Re: work?
  • Next by thread: Re: Just another Mathematica "Gotcha", and HoldForm