Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

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

Search the Archive

RE: Named Patterns in Switch

  • To: mathgroup at smc.vnet.net
  • Subject: [mg48972] RE: [mg48945] Named Patterns in Switch
  • From: "David Park" <djmp at earthlink.net>
  • Date: Fri, 25 Jun 2004 02:58:49 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Bobby,

I did change the foo example from a_. to a_ so the x^2 wouldn't match.

But I agree that your formulation is simpler and thank you for it.

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/

From: DrBob [mailto:drbob at bigfoot.com]
To: mathgroup at smc.vnet.net

It seems to me that foo didn't match x^2 properly, and isn't this simpler?

foo3[expr_]:=Replace[expr,{(a_.)*x^(n_):>a,(a_.)*y^(n_):>n}]
foo3/@{3*x^2,3*y^2,x^2}

{3,2,1}

foo4[expr_]:=
Replace[expr,{a_. b:g[f[_]..]/;FreeQ[a,g[__]|f[_]]:>
     a g@@(h2/@b),a_. b:f[_]/;FreeQ[a,g[__]|f[_]]:>a h[b]}]
foo4/@{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]]]}

Bobby

On Thu, 24 Jun 2004 13:09:16 -0400, David Park <djmp at earthlink.net> wrote:

> 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/
>
>



  • Prev by Date: [Final Call] ACA-2004 Conference on Applications of Computer Algebra
  • Next by Date: Re: faster sublist checking
  • Previous by thread: Re: Named Patterns in Switch
  • Next by thread: RE: Named Patterns in Switch