MathGroup Archive 1997

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Bug in pattern matching?

Peter Str=F6mbeck wrote:
> 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 t=
> 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]:=3D
> $Version
> Out[1]=3D
> "Microsoft Windows 3.0 (October 6, 1996)"
> Define list:
> In[2]:=3D
> ls=3DTable[a[j], {j,0,5}]
> Out[2]=3D
> {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=
> Use pattern matching:
> In[3]:=3D
> ls/.{first_, middle___, last_}\[Rule] {{first},{middle},{last}}
> Out[3]=3D
> {{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]:=3D
> C ls
> Out[4]=3D
> {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]:=3D
> ls/.{first_, middle___, last_}\[Rule] {{first},C {middle},{last}}
> Out[5]=3D
> {{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

This is not a bug.
In order to get what you want, just use  :>  instead of ->=20
The "culprit" are the different Attributes of :> and ->=20
as well as the properties of Sequence.

Checking out the operations Mathematica does by using Trace
clarifies the issue:

In[16]:=3D ls/.{first_, middle___, last_}->
 {{first},C {middle},{last}}//Trace

Out[16]=3D {{ls, {a[0], a[1], a[2], a[3], a[4], a[5]}},

>    {{{C {middle}, {C middle}}, {{first}, {C middle}, {last}}},

>     {first_, middle___, last_} -> {{first}, {C middle}, {last}},

>     {first_, middle___, last_} -> {{first}, {C middle}, {last}}},

>    {a[0], a[1], a[2], a[3], a[4], a[5]} /.

>     {first_, middle___, last_} -> {{first}, {C middle}, {last}},

>    {{a[0]}, {C a[1] a[2] a[3] a[4]}, {a[5]}}}

In[17]:=3D ls/.{first_, middle___, last_}:>=20
{{first},C {middle},{last}}//Trace

Out[17]=3D {{ls, {a[0], a[1], a[2], a[3], a[4], a[5]}},

>    {a[0], a[1], a[2], a[3], a[4], a[5]} /.

>     {first_, middle___, last_} :> {{first}, C {middle}, {last}},

>    {{a[0]}, C {a[1], a[2], a[3], a[4]}, {a[5]}},

>    {C {a[1], a[2], a[3], a[4]}, {C a[1], C a[2], C a[3], C a[4]}},

>    {{a[0]}, {C a[1], C a[2], C a[3], C a[4]}, {a[5]}}}

In[18]:=3D ?Sequence

Sequence[expr1, expr2, ... ] represents a sequence of arguments to be
   automatically into any function.

In[19]:=3D C Sequence[a[1],a[2],a[3],a[4],a[5]]

Out[19]=3D C a[1] a[2] a[3] a[4] a[5]

Rolf Mertig

  • Prev by Date: Re: how to use server license?
  • Next by Date: Re: Bug in pattern matching?
  • Previous by thread: Re: Bug in pattern matching?
  • Next by thread: Re: Bug in pattern matching?