Re: Re: ReplacePart except first element?
- To: mathgroup at smc.vnet.net
- Subject: [mg102144] Re: [mg102085] Re: ReplacePart except first element?
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Thu, 30 Jul 2009 05:35:12 -0400 (EDT)
- References: <h4m4ar$eah$1@smc.vnet.net> <200907290908.FAA19525@smc.vnet.net>
- Reply-to: drmajorbob at bigfoot.com
Works for me:
h[x_, a_] := ReplacePart[x, a -> x[[a]] + 1]
h[{1, 2, 3}, 1]
{2, 2, 3}
h[{1, 2, 3}, 2]
{1, 3, 3}
h[{1, 2, 3}, 3]
{1, 2, 4}
Bobby
On Wed, 29 Jul 2009 04:08:40 -0500, Ray Koopman <koopman at sfu.ca> wrote:
> On Jul 27, 11:03 pm, mokambo <alexandrepassosalme... at gmail.com> wrote:
>> I was trying to modify a list by adding 1 to a certain element.
>> I can't understand the following result:
>>
>> h[x_List, a_Integer] := ReplacePart[x, a -> x[[a]] + 1]
>>
>> h[{1, 2, 3}, 2] gives {,3,3} (what happened to the first element?) but
>> h[{1, 2, 3}, 1] gives {2,2,3} as expected.
>>
>> Eventually I changed to:
>>
>> h[x_List, a_Integer] := MapAt[Function[y, y + 1], x, a]
>>
>> but the ReplacePart version still puzzles me.
>> Is it because ReplacePart creates a copy instead of altering inline
>> like x[[a]] = val does?
>
> I don't know why
>
> h[x_,a_] := ReplacePart[x, a -> x[[a]] + 1]
>
> gave you what you posted. I get an error message
> and then the input with the Rule evaluated:
>
> h[{1,2,3}, 1]
>
> ReplacePart::argt:
> ReplacePart called with 2 arguments; 3 or 4 arguments are expected.
>
> ReplacePart[{1,2,3}, 1 -> 2]
>
> Here are three versions, all of which do what you want:
>
> h[x_,a_] := MapAt[#+1&, x, a]
>
> h[x_,a_] := ReplacePart[x, x[[a]]+1, a]
>
> h[x_,a_] := x /. (x[[a]] -> x[[a]] + 1)
>
--
DrMajorBob at bigfoot.com
- References:
- Re: ReplacePart except first element?
- From: Ray Koopman <koopman@sfu.ca>
- Re: ReplacePart except first element?