Re: List manipulation question
- To: mathgroup at smc.vnet.net
- Subject: [mg15893] Re: List manipulation question
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Wed, 17 Feb 1999 23:33:40 -0500
- References: <7a2b7v$1t6@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Maarten.vanderBurgt at icos.be wrote in message <7a2b7v$1t6 at smc.vnet.net>...
>
>Dear all,
>
>In the following piece of code I define a function Swap23 which is ment
>to swap elements 2 and 3 in a list.
>Executing the function on a simple list I get an error. Why do I get
>this error? Why do I not get this error when I execute the commnad from
>Swap23 "by hand" as is shown in In[4]?
>
>Thanks for any help
>
>
>Maarten van der Burgt
>Icos Vision Systems
>Leuven
>Belgium
>
>
>In[1]:=Swap23[L_List]:=Module
>[
> {temp},
> temp = L[[2]];
> L[[2]]=L[[3]];
> L[[3]] =temp;
> L
>]
>
>In[2]:= mylist = {1,2,3};
>
>In[3]:= Swap23[mylist]
>
>Set::"setps": "\!\({1, 2, 3}\) in assignment of part is not a symbol."
>Set::"setps": "\!\({1, 2, 3}\) in assignment of part is not a symbol."
>
>Out[3]= {1,2,3}
The input Swap23[mylist] evaluatest mylist to get Swap[{1,2,3}]
Then it passes {1,2,3} to L on the right, triggers a scoping change of temp
to temp$ and gets
Module[{temp$},
temp$ = {1, 2, 3}[[2]];
{1, 2, 3}[[2]] = {1, 2, 3}[[3]];
{1, 2, 3}[[3]] = temp$;
{1, 2, 3}
]
There are two problems here:
1) {1, 2, 3}[[2]] = {1, 2, 3}[[3]]; is not allowed:
the form must be
s[[2]] = .. where s is a symbol with a value previously assigned by Set
(=), not SetDelayed(:=), and the value must have part 2.
3) the output is already fixed as {1,2,3}.
Here is a version that works, and uses features of part setting,
Swap23[L_List]:=
Module[{temp = L},
temp[[{2,3}]]=L[[{3,2}]];
temp
]
mylist = {1,2,3}
Swap23[mylist]
{1,3,2}
>
>In[4]:= temp = mylist[[2]];
> mylist[[2]]=mylist[[3]];
> mylist[[3]] =temp;
> mylist
>
>Out[4]= {1,3,2}
This works becaues mylist is a symbol with preset value {1,2,3}
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565