Re: switch list elements, index from inside ??

*To*: mathgroup at smc.vnet.net*Subject*: [mg2675] Re: [mg2644] switch list elements, index from inside ??*From*: withoff (David Withoff)*Date*: Tue, 5 Dec 1995 02:25:59 -0500*Organization*: Wolfram Research, Inc.

In article <49u4td$kgj at dragonfly.wri.com> Allan Hayes <hay@haystack> writes: > davep at newton.umsl.edu > in [mg2644] switch list elements, index from inside ?? > writes > > >I have a problem regarding the interchanging of list elements > (using >the routine posted by Richard Mercer) > > > > t={1,2,3,4,5,6,7,8,9,10,11}; > > s[list_List]:= > > ReplacePart[ReplacePart[list,list[[n]],m],list[[m]],n]//. > > > {m->Random[Integer,{1,10}],n->Random[Integer,{1,10}]} > > s[t] > > > >Mma complains that the part and position specification (that's m > and >n) in ReplacePart is neither an integer nor a list of non zero > >integers.Why doesn't Mma accept the (Random-) Integers ? > > The part ReplacePart[ReplacePart[list,list[[n]],m],list[[m]],n] is > evaluated before m and n are replaced by the integers generated. > You can use Unevaluated to prevent this: > > t={1,2,3,4,5,6,7,8,9,10,11}; > s[list_List]:= > Unevaluated[ > ReplacePart[ReplacePart[list,list[[n]],m],list[[m]],n] > ]//.{m->Random[Integer,{1,10}],n->Random[Integer,{1,10}]} > > s[t] > > > {6, 2, 3, 4, 5, 1, 7, 8, 9, 10, 11} > > Allan Hayes > hay at haystack.demon.co.uk > Actually, this is an application where I'd be inclined to use With s2[list_List]:= With[{m = Random[Integer, {1, 10}], n = Random[Integer, {1, 10}]}, ReplacePart[ReplacePart[list,list[[n]],m],list[[m]],n]] not because the result is any different, but because it makes it clearer (to me) that you want m and n to be computed before all of the ReplacePart stuff. Dave Withoff Wolfram Research