MathGroup Archive 2001

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

Search the Archive

Re: Re: pattern matching quirks

  • To: mathgroup at smc.vnet.net
  • Subject: [mg29378] Re: [mg29362] Re: pattern matching quirks
  • From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
  • Date: Sat, 16 Jun 2001 02:47:50 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

You certainly can can. This is even documented:

The form s_:v is equivalent to Optional[s_, v].This form is also equivalent
to s:_: v.There is no syntactic ambiguity since s must be a symbol in this
case.

You can also test it yourself:

In[12]:=
f[1,a:Sin[x_]:Sin[2]]:=x
In[13]:=
f[1]
Out[13]=
2

-- 
Andrzej Kozlowski
Toyama International University
JAPAN

http://platon.c.u-tokyo.ac.jp/andrzej/
http://sigma.tuins.ac.jp/~andrzej/



on 01.6.15 3:23 PM, Jens-Peer Kuska at kuska at informatik.uni-leipzig.de
wrote:

> Hi,
> 
> you can't give optional arguments *and* general pattern with :
> 
> But the definition
> 
> 
> test[1, X["4"]] := X["4"]
> test[1, inputs : X[X[_Integer]] ...] := inputs
> test[1] := test[1, X["4"]]
> 
> 
> should produce what you want.
> 
> Regards
> Jens
> 
> Michael wrote:
>> 
>> 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
>> match.
>> 
>> 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
>> defined?
>> 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? :-)
>> 
>> Regards,
>> 
>> Michael Schmidt
>> michael at science.edu
> 
> 




  • Prev by Date: Re: Odd behavior of InterpolationFunction derivative
  • Next by Date: RE: Re: pattern matching quirks
  • Previous by thread: Re: pattern matching quirks
  • Next by thread: RE: Re: pattern matching quirks