MathGroup Archive 2003

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

Search the Archive

Re: Pattern Matching Problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg43424] Re: Pattern Matching Problem
  • From: "Allan Hayes" <hay at haystack.demon.co.uk>
  • Date: Fri, 29 Aug 2003 07:16:56 -0400 (EDT)
  • References: <bihp1v$b3u$1@smc.vnet.net>
  • Reply-to: "Allan Hayes" <hay at haystack.demon.co.uk>
  • Sender: owner-wri-mathgroup at wolfram.com

"Ersek, Ted R" <ErsekTR at navair.navy.mil> wrote in message
news:bihp1v$b3u$1 at smc.vnet.net...
> Consider the following:
>
> In[1]:=
>   ClearAll[f,a,b,c,w,x,y,z];
>   expr=a+b+c+f[w,2]+f[w,3]+x+f[x,2]+f[x,3]+y+f[y,2]+f[z,2];
>
>
> Can somebody suggest a general way to seperate the terms above into like
> groups. By "like" I mean having the same second argument for (f).  So for
> this example I want to get
>
> {a+b+c+x+y,  f[w,2]+f[x,2]+f[y,2]+f[z,2],   f[w,3]+f[x,3]}
>
> The pattern matcher should be able to do this because Plus has attributes
> Flat and Orderless.  However I can't find a way to make it happen.
>
> -------------------
> Thanks,
>    Ted Ersek
>

Ted,
Here is one way - but not very elegant!

ClearAll[f,a,b,c,w,x,y,z];
expr=a+b+c+f[w,2]+f[w,3]+x+f[x,2]+f[x,3]+y+f[y,2]+f[z,2];

Prepend[Plus @@@
Split[#[[Ordering[#[[All, 2]]]]] &[
Cases[expr, _f]], #[[2]] === #2[[2]] &], DeleteCases[expr, _f]]


Allan
---------------
Allan Hayes
hay at haystack.demon.co.uk
Voice: +44 (0)116 241 8747
Fax: +44 (0)870 164 0565




  • Prev by Date: Re: Pattern Matching Problem
  • Next by Date: Re: Pick up coordinates along different contours.
  • Previous by thread: Re: Pattern Matching Problem
  • Next by thread: RE: Pattern Matching Problem