Re: switch list elements, index from inside ??
- Subject: [mg2675] Re: [mg2644] switch list elements, index from inside ??
- From: withoff (David Withoff)
- Date: Tue, 5 Dec 1995 02:25:59 -0500
- Approved: usenet@wri.com
- Distribution: local
- Newsgroups: wri.mathgroup
- 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