[Date Index]
[Thread Index]
[Author Index]
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
>
>
>
Prev by Date:
**Re: Notebook Styles**
Next by Date:
**remote kernel**
Previous by thread:
**Bug in pattern matching?**
Next by thread:
**Re: Bug in pattern matching?**
| |