Re: List manipulation question
- To: mathgroup at smc.vnet.net
- Subject: [mg15918] Re: [mg15852] List manipulation question
- From: Jurgen Tischer <jtischer at col2.telecom.com.co>
- Date: Wed, 17 Feb 1999 23:33:53 -0500
- Organization: Universidad del Valle
- References: <199902122340.SAA02320@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Maarten, in the evaluation of your function, first mylist is replaced by {1,2,3} and this is given to the Module. So you have a variable by value and not by address and Mathematica complains. The solution depends on what you really want to achieve. If you want your function to return the permutated list without changing the argument list, you define a local list inside the Module: Swap23[L_List]:=Module [ {temp,Li=L}, temp = Li[[2]]; Li[[2]]=Li[[3]]; Li[[3]] =temp; Li ] If you want the argument changed, you can do the following: Swap23[L_Symbol]:=Module [ {temp}, temp = L[[2]]; L[[2]]=L[[3]]; L[[3]] =temp; L ] SetAttributes[Swap23,HoldAll] Jurgen Maarten.vanderBurgt at icos.be wrote: > > 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} > > In[4]:= temp = mylist[[2]]; > mylist[[2]]=mylist[[3]]; > mylist[[3]] =temp; > mylist > > Out[4]= {1,3,2}
- References:
- List manipulation question
- From: Maarten.vanderBurgt@icos.be
- List manipulation question