Re: Bug in pattern matching?
- To: mathgroup at smc.vnet.net
- Subject: [mg8726] Re: [mg8722] Bug in pattern matching?
- From: jpk at max.mpae.gwdg.de
- Date: Sat, 20 Sep 1997 22:27:56 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Hi Peter, the explanation is quite easy, Your rule says ls/.{first_, middle___, last_} -> {{first},C {middle},{last}} that {{first},C {middle},{last}} is to evaluated (You use Rule[] instead RuleDelayed[]) since Times[] has the attribute Listable the evaluation yields {{first} {Times[C,middle]},{last}} than the transformation is applied to ls, middle is bounded to Sequence[a[1],a[2],a[3],a[4]] and You get Times[C,Sequence[a[1],a[2],a[3],a[4]]] and furture Times[C,a[1],a[2],a[3],a[4],a[5]] Your mistake is to use Rule[] instead of RuleDelayed[] with In[4]:= ls/.{first_, middle___, last_} :> {{first},C {middle},{last}} Out[4]= {{a[0]},{C a[1],C a[2],C a[3],C a[4]},{a[5]}} all works as You want. Hope that helps Jens > Hi, I've posted this problem to Wolfram support but received no answer = so I > thought I might just post it here aswell. > > I'm trying to "deconstruct" a list, perform an operation to a pert of = the > list and then recombine the result. When I did this I found out that > multiplication in pattern matching performs differently than = otherwise. > > Check version: > > In[1]:= > $Version > Out[1]= > "Microsoft Windows 3.0 (October 6, 1996)" > > Define list: > > In[2]:= > ls=Table[a[j], {j,0,5}] > Out[2]= > {a[0],a[1],a[2],a[3],a[4],a[5]} > > I want to split this list into the following three sublists: > > {a[0],a[1],a[2],a[3],a[4],a[5]} -> {a[0]}, {a[1], a[2], a[3], a[4]}, = {a[5]} > > Use pattern matching: > > In[3]:= > ls/.{first_, middle___, last_}\[Rule] {{first},{middle},{last}} > Out[3]= > {{a[0]},{a[1],a[2],a[3],a[4]},{a[5]}} > > This works fine. Now I want to multiply the middle list by a factor C. > Ordinary multiplication works like this: > > In[4]:= > C ls > Out[4]= > {C a[0],C a[1],C a[2],C a[3],C a[4],C a[5]} > > Doing this in a pattern matching statement produces a totally = different > result: > > In[5]:= > ls/.{first_, middle___, last_}\[Rule] {{first},C {middle},{last}} > Out[5]= > {{a[0]},{C a[1] a[2] a[3] a[4]},{a[5]}} > > The middle list now contains a completely different result than = Out[4]! > > Can anyone please explain this to me? > > /Peter Str=F6mbeck > > >