Re: Pattern Matching

• To: mathgroup at smc.vnet.net
• Subject: [mg49020] Re: [mg49003] Pattern Matching
• From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
• Date: Tue, 29 Jun 2004 04:49:46 -0400 (EDT)
• References: <200406280813.EAA04275@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

On 28 Jun 2004, at 17:13, Bruce W. Colletti wrote:

> This command (built from recent traffic) extracts the quadratic's
> coefficients and exponents:
>
>     Cases[4x + x^2, c_.*x^n_. -> {c,n}]
>
>     {{4,1}, {1,2}}
>
> As I understand it, the symbol "_." uses the global default value for
> the given variable, a value that can be set using Default.
>
> Question:  For the specific (illustrative) problem above, how would I
> set (using Default[ ]) different default values for c and n?  Or must I
> do something like:
>
>     Cases[4x + x^2, (c_:5)*x^(n_:7) -> {c,n}]
>
> Thanks.
>
> Bruce
>
>
Deafults are assigned to functions, not to variables. So you could do
this:

Unprotect[Times];

Default[Times] = 5

Cases[4*x + x^2, (c_.)*x^(n_:7) -> {c, n}]

{{4, 7}, {5, 2}}

But obviously it would not be a good idea to leave it like this!

This is a much more subtle way to achieve this without unprotecting and
modifying Times:

Block[{Times}, Default[Times] = 5; SetAttributes[Times,
{OneIdentity}]; Cases[4*x + x^2, (c_.)*x^(n_:7) ->
{c, n}]]

{{4, 7}, {5, 2}}

Note that it will not work without assigning the Attribute OneIdentity
to Times inside Block! The explanation why this is so is quite
complicated so all I will say is I learnt some years back from Michael
Trott's marvellous "Mathematica Guidebooks".

Andrzej Kozlowski
Chiba, Japan
http://www.mimuw.edu.pl/~akoz/

• References:
• Prev by Date: Re: PlotLabel with assigned variables *and* on several lines
• Next by Date: Re: Mathematica on Linux
• Previous by thread: Re: Pattern Matching
• Next by thread: RE: Pattern Matching