Re: simple pattern match question
- To: mathgroup at smc.vnet.net
- Subject: [mg91178] Re: simple pattern match question
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Fri, 8 Aug 2008 07:16:12 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g7ed78$2po$1@smc.vnet.net>
congruentialuminaire at yahoo.com wrote: > I am trying to understand simple pattern rule evaulation. The > following trivial examples baffles me: > > --------------------------------------------------- > In[1]:= f[x_Number] := x ^ 2 > In[2]:= f[3] > Out[2]= f[3] > > In[3]:= f[3.3] > Out[3]= f[3.3] > > In[4]:= NumberQ[3.3] > Out[4]= True > -------------------------------------------------- > Why is it that f[3.3] does not evaluate?? The pattern x_Number matches any expression with head Number. The head Number does not exist natively in Mathematica. The numbers 3 and 3.3 have head Integer and Real, respectively. In[1]:= Head[3] Head[3.3] Out[1]= Integer Out[2]= Real So, except if you define some expression with head Number, the definition of the function f will match nothing and the function f will return unevaluated in all cases. The pattern x_?NumberQ tests whether the expression x is a number, that is if upon evaluation the resulting expression has head Integer, Rational, Real, or Complex. (Note that Number[Pi] failed.) The pattern x_?NumericQ test whether the expression x can be evaluated to a numeric quantity. (NumericQ[Pi] returns True.) In[3]:= f[x_?NumberQ] := x^2 f[3] f[3.3] Out[4]= 9 Out[5]= 10.89 HTH, -- Jean-Marc