MathGroup Archive 2004

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

Search the Archive

Re: Pattern Matching


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/


  • 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