RE: interchange entries in list

*To*: mathgroup at smc.vnet.net*Subject*: [mg27470] RE: [mg27419] interchange entries in list*From*: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.de>*Date*: Tue, 27 Feb 2001 00:37:22 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

for my answer see below: -----Original Message----- From: Murray Eisenberg [mailto:murray at math.umass.edu] To: mathgroup at smc.vnet.net Subject: [mg27470] [mg27419] interchange entries in list Is there any hidden trouble with the following function for interchanging two entries in a list? swap[v_List, i_, j_] := v /. {v[[i]]->v[[j]], v[[j]]->v[[i]]} It seems to work, yet I'm uncomfortable. Note that I am _not_ uncomfortable with a construction such as vec[[{1,2}]] = v[[{2,1}]] or the Module swapItems[v_List, i_, j_] := Module[ {t = v}, t[[{i, j}]] = t[[{j, i}]]; t ] that expresses this idea. With "swap", evidently my concern is with when what items get replaced by what. In other words, why SHOULD "swap" work? ------------------- Well, Murray, it doesn't! Having looked at the Trace In[20]:= Trace[swap[Range[5], 2, 5]] you might try In[21]:= swap[{1, 2, 3, 2, 1}, 2, 3] Out[21]= {1, 3, 2, 3, 1} which is not what swap should do. -- Hartmut