MathGroup Archive 2014

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

Search the Archive

Why does _+_==2_ (or, why is HoldPattern required for sensible matching)?

  • To: mathgroup at
  • Subject: [mg132222] Why does _+_==2_ (or, why is HoldPattern required for sensible matching)?
  • From: Alan <alan.isaac at>
  • Date: Mon, 20 Jan 2014 03:59:45 -0500 (EST)
  • Delivered-to:
  • Delivered-to:
  • Delivered-to:
  • Delivered-to:

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.

Alan Isaac

  • Prev by Date: Re: Compact formulation of array of constraints
  • Next by Date: BSplineSurface & BSplineFunction_Extracting Data
  • Previous by thread: Re: How to show 1+2+3+ ... = -1/12 using Mathematica's symbols?
  • Next by thread: Re: Why does _+_==2_ (or, why is HoldPattern required for