Re: ReplacePart question
- To: mathgroup at smc.vnet.net
- Subject: [mg13202] Re: ReplacePart question
- From: "Allan Hayes" <hay at haystack.demon.cc.uk>
- Date: Mon, 13 Jul 1998 07:42:51 -0400
- References: <6nkvd3$17k@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Here is one way round this. I give only the full version - special
cases, for example when
expos is a single integer, or repos is omitted need extra code.
MyReplacePart[expr_, rep_, expos:{___List}, repos:{___List}]:=
Module[{f},
MapIndexed[f, expr,{0, Infinity}, Heads->True]/.
Thread[f[_,#]&/@expos ->Extract[rep,repos]]/.f->(#&) ]
EXAMPLE
MyReplacePart[h[a][k[b[e]],c], {A,C,{E}}, {{1,1},{1,1,1},{0,1}},
{{1},{2},{3,1}}]
h[E][k[A],c]
Allan Hayes
Training and Consulting
Leicester UK
http://www.haystack.demon.co.uk
hay at haystack.demon.co.uk
voice: +44 (0)116 271 4198
fax: +44(0)116 271 8642
-------------------------------------------------------------
Walter Seaman wrote in message <6nkvd3$17k at smc.vnet.net>...
>hello,
>Here is what m'ca ReplacePart is supposed to do according to the online
>help and the manual:
>
>"ReplacePart[expr, new, pos, npos] replaces parts at positions pos in
>expr by parts at positions npos in new."
>
>For example:
>
>ReplacePart[{a, b, c,d},{x,y},{{1},{4}},2] gives output
>{y,b,c,y}
>
>which is ok. I cannot get m'ca to replace selected parts of expr with
>selected parts of new. For example, suppose I want to take the list
>{a,b,c,d} and replace a with y and x with b. It seems I should be able
>to use the command
>
>ReplacePart[{a, b, c,d},{x,y},{{1},{4}},{2,1}]
>
>but the output is
>{{x,y}\[LeftDoubleBracket]2,1\[RightDoubleBracket],b,
> c,{x,y}\[LeftDoubleBracket]2,1\[RightDoubleBracket]}
>
>i.e. m'ca is looking for {x,y}[[1,2]] (which is not defined) and trying
>to replace it in positions 1 and 4.
>If I try
>
>ReplacePart[{a, b, c,d},{x,y},{{1},{4}},{{2},{1}}]
>
>I still get the output
>
>{{x,y}\[LeftDoubleBracket]{2},{1}\[RightDoubleBracket],b,
> c,{x,y}\[LeftDoubleBracket]{2},{1}\[RightDoubleBracket]}
>
>Can anyone tell me how to accomplish this selective replacement? Thanks,
>W.Seaman
>