Re: Why does _+_==2_ (or, why is HoldPattern required for
- To: mathgroup at smc.vnet.net
- Subject: [mg132232] Re: Why does _+_==2_ (or, why is HoldPattern required for
- From: Bob Hanlon <hanlonr357 at gmail.com>
- Date: Tue, 21 Jan 2014 03:02:08 -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>
Since MatchQ does NOT have the attribute HoldAll or HoldRest, the second argument is evaluated before the test and without at least one name associated with the blanks to make them distinct you get 2_ Attributes[{MatchQ, Cases}] {{Protected}, {Protected}} list = {a, b + c, d, e + f, 2 g}; r1 = Select[list, MatchQ[#, x_ + y_] &] {b + c, e + f} r1 == Select[list, MatchQ[#, x_ + _] &] == Select[list, MatchQ[#, _ + y_] &] == Cases[list, x_ + y_] == Cases[list, x_ + _] == Cases[list, _ + y_] True r2 = Select[list, MatchQ[#, _ + _] &] {2 g} r2 == Cases[list, _ + _] True Although counter-intuitive, it is consistent and hence predictable. Bob Hanlon On Mon, Jan 20, 2014 at 3:59 AM, 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>
- Why does _+_==2_ (or, why is HoldPattern required for sensible matching)?