MathGroup Archive 2001

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

Search the Archive

pattern matching quirks

  • To: mathgroup at
  • Subject: [mg29351] pattern matching quirks
  • From: "Michael" <michael at>
  • Date: Thu, 14 Jun 2001 02:27:27 -0400 (EDT)
  • Sender: owner-wri-mathgroup at

I am trying to write a function which matches only on a specific pattern of
arguments, some of which can be optional.  The problem I am having is that
certain complex patterns aren't being matched under conditions which should

For example:

In[1] := test[1, inputs : (X["4"] | X[X[_Integer]] ...) : X["4"]] := inputs

In[2] := test[1]
Out[2] := X[4]

This is the expected behavior.  However if I redefine the function so that
the alternatives are collected within a single head, it doesn't work:

In[3] := Clear[test];
test[1, inputs : (X["4" | X[_Integer] ...]) : X["4"]] := inputs

In[4] := test[1]
Out[4] := test[1]

In[5] := MatchQ[X["4"], (X["4" | X[_Integer] ...])]
Out[5] := True

MatchQ says that my default values matches the given pattern.  Through some
experimentation I had discovered that the function will NOT be called if the
default value does not match the pattern for the optional argument.  This is
annoying (and undocumented I think) because I would like to insert a
function call to generate the default value.  This does not work right
either because the default value appears to be evaluated when the function
is defined, and wrapping it with Hold causes it to fail the above pattern
match.  So instead I have to assign it to some inane value (hence the
alternatives) and then do a rule transformation in the function itself (not
shown above).

So here are my questions:
1. Why does the default value for a pattern have to match that pattern?
2. Why is the default value seeming to be evaluated when the function is
3. Why do some patterns pass MatchQ but not result in a function call?
Notably, X[a|b] versus X[a]|X[b]?
4. What other quirks should I be aware of that I haven't run into yet? :-)


Michael Schmidt
michael at

  • Prev by Date: Re: Re: Strange problems about my mathematica
  • Next by Date: Re: A New User
  • Previous by thread: Re: Java, Graphics Output, MathCanvas
  • Next by thread: Re: pattern matching quirks