Re: Just another Mathematica "Gotcha", and HoldForm
- To: mathgroup at smc.vnet.net
- Subject: [mg120830] Re: Just another Mathematica "Gotcha", and HoldForm
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Fri, 12 Aug 2011 05:04:28 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <j1r5d3$fi4$1@smc.vnet.net> <j1tnpf$pnu$1@smc.vnet.net>
- Reply-to: drmajorbob at yahoo.com
Again, no experimentation is needed. If you want to know what an operator operates upon in a statement, double-click on that operator. Done. Bobby On Thu, 11 Aug 2011 04:09:42 -0500, Richard Fateman <fateman at cs.berkeley.edu> wrote: > 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 > but > 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. > > RJF > -- DrMajorBob at yahoo.com