Re: HoldPattern & Pattern Matching
- To: mathgroup at smc.vnet.net
- Subject: [mg50478] Re: [mg50473] HoldPattern & Pattern Matching
- From: Andrzej Kozlowski <andrzej at akikoz.net>
- Date: Mon, 6 Sep 2004 03:59:36 -0400 (EDT)
- References: <200409050753.DAA29807@smc.vnet.net>
- Reply-to: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Sender: owner-wri-mathgroup at wolfram.com
On 5 Sep 2004, at 16:53, Paul Buettiker wrote: > > Dear all, > > I don't understand the following behavior of Mathematica 4.2: > > > In[1]:= $Version > Out[1]= 4.2 for Linux (August 23, 2002) > > In[2]:= mysum = h[a] - 7h[b] > Out[2]= h[a] - 7 h[b] > > In[3]:= mysum /. HoldPattern[Plus[aaa : (_.*h[_]) ..]] :> aaa > Out[3]= h[a] - 7 h[b] > > In[4]:= mysum /. HoldPattern[Plus[aaa : (_.*h[_]) ..]] :> aaa // Trace > Out[4]= {{mysum, h[a] - 7 h[b]}, >> h[a] - 7 h[b] /. HoldPattern[Plus[aaa:((_.) h[_]..)]] :> aaa, >> Plus[Sequence[h[a], -7 h[b]]], h[a] - 7 h[b]} > > > The pattern matching should work for an arbitrary number of terms, > that's why I used Repeated[...], i.e. the "..". > > I hoped to get Sequence[ h[a], -7 h[b] ]. I dont understand why > Sequence[...] is wrapped by Plus[...]. What did I miss? > > Many thanks! > Paul. > > This works: Replace[mysum,HoldPattern[Plus[aaa : (_.*h[_]) ..]] :> aaa] Sequence[h[a],-7 h[b]] The whole point lies inthe difference between Replace and ReplaceAll. Here is the documentation for ReplaceALl: ReplaceAll looks at each part of expr, tries all the rules on it, and then goes on to the next part of expr. The first rule that applies to a particular part is used; no further rules are tried on that part, or on any of its subparts. I hope this makes it clear. Andrzej Kozlowski Chiba, Japan http://www.mimuw.edu.pl/~akoz/
- References:
- HoldPattern & Pattern Matching
- From: Paul Buettiker <buettike@itkp.uni-bonn.de>
- HoldPattern & Pattern Matching