Re: Why does _+_==2_ (or, why is HoldPattern required for

*To*: mathgroup at smc.vnet.net*Subject*: [mg132231] Re: Why does _+_==2_ (or, why is HoldPattern required for*From*: Sseziwa Mukasa <mukasa at gmail.com>*Date*: Tue, 21 Jan 2014 03:01:48 -0500 (EST)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*Delivered-to*: l-mathgroup@wolfram.com*Delivered-to*: mathgroup-outx@smc.vnet.net*Delivered-to*: mathgroup-newsendx@smc.vnet.net*References*: <20140120085945.0A76D69CD@smc.vnet.net>

The fundamental feature of Mathematica's programming language is "everything is an expression". Blank[] has the value Blank[] and only is replaced by another value in pattern matching expressions like Replace, Cases etc. and evaluation of replacement rules such as when a substitution rule has been defined: f[_]:=<expression>. Since that is not happening in this case the rule x_+x_->2 x applies, hence the result. On Monday, January 20, 2014, Alan <alan.isaac at gmail.com> wrote: > I'm a relatively new user of Mathematica, and the following behavior seems > odd to me: > > In[1]:= _ + _ > Out[1]= 2 _ > > Use of `Plus` here is just to illustrate a more general "problem with > `Blank`. I had expected pattern objects to resist such evaluation. This is > possibly related to the fact that I was surprised by the following: > > In[2]:= Blank[] == Blank[] > Out[2]= True > > Since each Blank[] can match anything, I find this conceptually to be the > wrong behavior. As an example of a counter-intuitive result: > > In[3]:= MatchQ[a + b, _ + _] > Out[3]= False > > I understand that I can deal with this problem by using HoldPattern. > > In[4]:= MatchQ[a + b, HoldPattern[_ + _]] > Out[4]= True > > So my question is not how to deal with the problem, but rather is a > request for an explanation of why the current pattern evaluation behavior > is desirable. > > Thanks, > Alan Isaac > >

**References**:**Why does _+_==2_ (or, why is HoldPattern required for sensible matching)?***From:*Alan <alan.isaac@gmail.com>