Replacing Parts
- To: mathgroup at smc.vnet.net
- Subject: [mg7643] Replacing Parts
- From: Richard Finley <trfin at fiona.umsmed.edu>
- Date: Tue, 24 Jun 1997 03:36:06 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
In an earlier communication in response to Robert Prus about problems with
MatrixExp, I wrote about some difficulties I had with replacing parts of a
list or array using the replacement -> . I have now had time to play a
little more with it and find that I have been working for a long time with a
misunderstanding about replacing parts so I thought others might have the
same problem and benefit from a discussion:
In essence, if you have a list, say
list1 = { a, b, c, b, a }
and you want to form a new list
list2 = { a, 3, c, b, a }
it might seem reasonable to use
list2 = list1 /. list1[ [ 2 ] ] -> 3
but if you do this you will get
list2 = { a, 3, c, 3, a }
because the Part command is carried out first and you are actually getting
list2 = list1 /. b -> 3
This is somewhat surprising to me because if you use
list1 [ [ 2 ] ] = 3
you don't get b = 3 but you actually get list1[ [ 2 ] ] = 3 and therefore
list1 = { a, 3, c, b, a }
so I guess Part is evaluated prior to -> but after = ?? This gets a little
subtle for me so if someone can clarify it better, I am interested.
If you want to carry out the operation I intended, you must do something like
list2 = ReplacePart[ list1, 3, 2 ]
which gives, as intended,
list2 = { a, 3, c, b, a }
Even when you think you understand certain commands, the subtleties of
execution can sometimes surprise you so it pays to stay alert!!
RF