Re: Re: ReplacePart except first element?
- To: mathgroup at smc.vnet.net
- Subject: [mg102135] Re: [mg102085] Re: ReplacePart except first element?
- From: Ray Koopman <koopman at sfu.ca>
- Date: Thu, 30 Jul 2009 05:33:28 -0400 (EDT)
Works for me, too, when I use v6. I was using 5.2.
----- DrMajorBob <btreat1 at austin.rr.com> wrote:
> 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