MathGroup Archive 1998

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

Search the Archive

Pattern matching trivia

  • To: mathgroup at smc.vnet.net
  • Subject: [mg13628] Pattern matching trivia
  • From: Ersek_Ted%PAX1A at mr.nawcad.navy.mil
  • Date: Fri, 7 Aug 1998 03:08:29 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

I just discovered something interesting about pattern matching. The
definitions for (goo) are no applied in the lines below.   I understand
this is
because an expression with the head Complex or Rational is an atom, and
is  not
considered a sum or product of smaller expressions.

In[1]:=
goo[a_+b_]:={Complex,a,b}
goo[m_/n_]:={Rational,m,n}


In[3]:=
goo[2+3 I]

Out[3]=
goo[2+3 I]


In[4]:=
goo[2/3]//InputForm

Out[4]=
goo[2/3]


Now the function (foo) below has the attribute HoldAllComplete. The
peculiar thing is that the definitions are now used.  It seems that
when the arguments of (foo) are Complex or Rational, the pattern
matcher now treats these arguments as the sum or product of smaller
expressions.

In[5]:=
Attributes[foo]={HoldAllComplete};
foo[a_+b_]:={Complex,a,b}
foo[m_/n_]:={Rational,m,n}


In[7]:=
foo[2+3I]

Out[7]=
{Complex,2,3 I}


In[8]:=
foo[2/3]

Out[8]=
{Rational,2,3}


It turns out Version 3.0 has exactly five built in functions with the
HoldAllComplete attribute.  They are: HoldComplete
InterpretationBox
MakeBoxes
Parenthesize
Unevaluated


Note:  Parenthesize is only documented via the usage message below. I
think that means it's an experimental feature.

In[9]:=
?Parenthesize
"Parenthesize[ expr, fmt, prec, group] will represent expr in format fmt
and  \
parenthesize it if necessary."

__________________________________
Ted Ersek

PS
Starting 10 Aug 1998  my email address will be: ErsekTR at navair.navy.mil



  • Prev by Date: A couple of curious outputs from Integrate[]
  • Next by Date: Re: What is the fastest machine for Mathematica?
  • Previous by thread: Re: A couple of curious outputs from Integrate[]
  • Next by thread: Re: Pattern matching trivia