MathGroup Archive 2005

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

Search the Archive

Re: Match exactly zero or one

  • To: mathgroup at smc.vnet.net
  • Subject: [mg60538] Re: Match exactly zero or one
  • From: Peter Pein <petsie at dordos.net>
  • Date: Tue, 20 Sep 2005 05:18:53 -0400 (EDT)
  • References: <dgm0ef$npn$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Trevor Baca schrieb:
> What's the easiest way to match exactly zero or one expressions within,
> say, MatchQ[ ]?
> 
> For example: call any expression expr a well-formed foo when and only
> when (1) the head of expr equals foo; (2) the first element of expr is
> either 0 or 1 bar expressions; (3) the last element of expr is an
> integer. Then neither the  predicate ...
> 
>    FooQ[expr_] := MatchQ[expr, foo[_bar, _Integer]]
> 
> .... nor ...
> 
>    FooQ[expr_] := MatchQ[expr, foo[__bar, _Integer]]
> 
> .... nor ...
> 
>    FooQ[expr_] := MatchQ[expr, foo[___bar, _Integer]]
> 
> .... accurately capture the definition of foo.
> 
> For string-matching there's the ? operator; but what's the best
> approach for expression-matching?
> 
> (FWIW Gavin Scott posed this question in December 2000, but I couldn't
> find an answer in the thread.)
> 
> 
> Trevor.
> 
Hi Trevor,

using named patterns:

In[1]:=
  FooQ[expr_] :=
    MatchQ[expr, foo[bbq___bar /; Length[{bbq}] <= 1, _Integer]]
In[2]:= FooQ[foo[bar[this], 5]]
Out[2]= True
In[3]:= FooQ[foo[Pi]]
Out[3]= False
In[4]:= FooQ[foo[Floor[Pi]]]
Out[4]= True
In[5]:= FooQ[foo[bar[this], bar[that], 13]]
Out[5]= False

is this correct?

-- 
Peter Pein, Berlin
GnuPG Key ID: 0xA34C5A82
http://people.freenet.de/Peter_Berlin/


  • Prev by Date: Re: Re: another Bug in Reduce ?
  • Next by Date: Re: Differences between recursions and limit
  • Previous by thread: Re: Match exactly zero or one
  • Next by thread: 'Changing' parameters in an expression