RE: Named Patterns in Switch
- To: mathgroup at smc.vnet.net
- Subject: [mg48963] RE: [mg48945] Named Patterns in Switch
- From: "David Park" <djmp at earthlink.net>
- Date: Fri, 25 Jun 2004 02:58:35 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Thanks to everyone for the suggestions.
I'm not completely clear in my own mind what I need here, but I think I want
to sharpen it up so that the pattern must match the entire expression. And I
would like to avoid retyping the entire pattern. The following is my
additional modification of the example from the various suggestions.
foo[expr_] :=
With[{patt1 = (a_)*x^(n_), patt2 = (a_)*y^(n_)},
Switch[expr,
patt1, Replace[expr, patt1 -> a],
patt2, Replace[expr, patt2 -> n],
_, expr]]
foo /@ {3*x^2, 3*y^2, x^2}
{3, 2, x^2}
Here is an example more along the lines of my actual problem...
Clear[foo2]
foo2[expr_] :=
With[
{patt1 = a_. b:g[f[_] ..] /; FreeQ[a, g[__] | f[_]],
patt2 = a_. b:f[_] /; FreeQ[a, g[__] | f[_]]},
Switch[expr,
patt1, Replace[expr, patt1 :> a g @@ (h2 /@ b)],
patt2, Replace[expr, patt2 -> a h[b]],
_, expr]
]
foo2 /@ {x, g[x], 3f[x], a g[f[x], f[y], f[z]]}
{x, g[x], 3 h[f[x]], a g[h2[f[x]], h2[f[y]], h2[f[z]]]}
David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/
From: DrBob [mailto:drbob at bigfoot.com]
To: mathgroup at smc.vnet.net
How's this?
foo[expr_]:=expr/.{(a_.)*x^(n_):>a,(a_.)*y^(n_):>n}
foo[3*x^3]
3
Bobby
On Thu, 24 Jun 2004 05:36:29 -0400 (EDT), David Park <djmp at earthlink.net>
wrote:
> Dear MathGroup,
>
> Here is an attempted routine using Switch that does not work.
>
> foo[expr_] :=
> Switch[expr,
> (a_.)*x^(n_), a,
> (a_.)*y^(n_), n]
>
> foo[3*x^3]
> a (I was hoping for 3)
>
>
> Switch uses patterns, but any named patterns are useless. So the a in the
third argument in Switch has nothing to do with the a_. in the second
argument.
>
> Is there some Mathematica construction that will test successive patterns
with names, do a calculation with the first match and use the names in the
patterns?
>
> David Park
> djmp at earthlink.net
> http://home.earthlink.net/~djmp/
>
>
>
>
--
DrBob at bigfoot.com
www.eclecticdreams.net/index.html