Re: Pattern Matching

*To*: mathgroup at smc.vnet.net*Subject*: [mg24061] Re: Pattern Matching*From*: "David Bailey" <db at salford-software.com>*Date*: Thu, 22 Jun 2000 01:01:53 -0400 (EDT)*Organization*: University of Salford, Salford, Manchester, UK*References*: <8hsu3g$dh4@smc.vnet.net> <8i1suj$jls@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Allan Hayes <hay at haystack.demon.co.uk> wrote in message news:8i1suj$jls at smc.vnet.net... > Johannes, > > Re your first question. > > > We can avoid this by using HoldPattern: > > > x[1] b[1] + x[2] b[2] /. > HoldPattern[Plus[Times[x[_], b[_]] ..]] -> z > > z > > > However it does seem odd that, in spite of (*1*), we get > > x * b[1] + x* b[2] /. > (x* b[_]) .. -> z > > 2 z > > -- > Allan I experimented with various constructs based on HoldPattern and Repeated, but without success. I think the easiest way to isolate terms of the form x[i]b[i] is to proceed in stages. First wrap the terms of interest in a function - say f - and then merge them together: ss = x[1]b[1] + x[2]b[2] + x[3]b[3] + x[10]b[5] ss /. x[n_]b[n_] -> f[x[n]b[n]] //. f[a_, a1___] + f[b_, b1___] -> f[a, a1, b, b1] This gives: f[b[3] x[3], b[1] x[1], b[2] x[2]] + b[5] x[10] At this point you can use a replacement such as f[__]->v, or you can do something useful to the arguments of f. David Bailey Salford Software