Match exactly zero or one

*To*: mathgroup at smc.vnet.net*Subject*: [mg60518] Match exactly zero or one*From*: "Trevor Baca" <trevorbaca at gmail.com>*Date*: Mon, 19 Sep 2005 04:45:38 -0400 (EDT)*Sender*: owner-wri-mathgroup at wolfram.com

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.