Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
1997
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 1997

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

Search the Archive

Re: Bug in pattern matching?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg8739] Re: [mg8722] Bug in pattern matching?
  • From: "C. Woll" <carlw at u.washington.edu>
  • Date: Sat, 20 Sep 1997 22:28:06 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Peter,

The problem you are having is due to using Rule instead of RuleDelayed.
Try

ls /. {f_,m___,l_}:>{{f},c {m},{l}}

instead.

If you use Rule, Mma first converts the rule from

{f_,m___,l_}->{{f},c {m},{l}}

to

{f_,m___,l_}->{{f},{c m},{l}}

and then applies this rule, which produces your unexpected behavior.

Carl Woll
Dept of Physics
U of Washington

On Fri, 19 Sep 1997, 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.
>=20
> 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.
>=20
> Check version:
>=20
> In[1]:=3D
> $Version
> Out[1]=3D
> "Microsoft Windows 3.0 (October 6, 1996)"
>=20
> Define list:
>=20
> 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]}
>=20
> I want to split this list into the following three sublists:=20
>=20
> {a[0],a[1],a[2],a[3],a[4],a[5]} -> {a[0]}, {a[1], a[2], a[3], a[4]}, {a[5=
]}
>=20
> Use pattern matching:
>=20
> 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]}}
>=20
> This works fine. Now I want to multiply the middle list by a factor C.
> Ordinary multiplication works like this:
>=20
> 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]}
>=20
> Doing this in a pattern matching statement produces a totally different
> result:
>=20
> 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]}}
>=20
> The middle list now contains a completely different result than Out[4]!
>=20
> Can anyone please explain this to me?
>=20
> /Peter Str=F6mbeck
>=20
>=20
>=20
>=20



  • Prev by Date: Re: When to use Compile[]
  • Next by Date: graphics
  • Previous by thread: Re: Bug in pattern matching?
  • Next by thread: Re: Bug in pattern matching?