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: Tue, 16 Sep 2003 04:36:51 -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