Strange Behaviour of ReplaceAll with Subscript (A bug or what?)
- To: mathgroup at smc.vnet.net
- Subject: [mg113317] Strange Behaviour of ReplaceAll with Subscript (A bug or what?)
- From: Thomas Dowling <thomasgdowling at gmail.com>
- Date: Sat, 23 Oct 2010 07:06:36 -0400 (EDT)
Hello,
I have come across some strange behaviour with ReplaceAll when creating
subscripted variables,
which I am not able to explain.
The Problem:
I have lists like the following:
list1 = Partition[Range[6], {3}]
Out[5]={{1,2,3},{4,5,6}}
list2 = Partition[Range[9], {3}]
list3 = Partition[Range[12], {3}]
I wish to convert to a list of indexed variables which I do as follows:
replist={Subscript[a,x],Subscript[a,y],Subscript[a,z]};
list1/.{x_,y_,z_}-> replist
This produces the expected output
{{Subscript[a, 1],Subscript[a, 2],Subscript[a, 3]},{Subscript[a,
4],Subscript[a, 5],Subscript[a, 6]}}
The same applies to list3
list3/.{x_,y_,z_}-> replist
However, **list2** produces the following
list2/.{x_,y_,z_}-> replist
{Subscript[a, {1,2,3}],Subscript[a, {4,5,6}],Subscript[a, {7,8,9}]}
No such problem arises with Power or with Times (but the same problem
occurs with Superscript)
list2/.{x_,y_,z_}-> {Power[a,x],Power[a,y],Power[a,z]}
gives as output
{{a,a^2,a^3},{a^4,a^5,a^6},{a^7,a^8,a^9}}
A Workaround:
There is an easy solution using Replace and specifying the level
Replace[list2, {x_,y_,z_}-> replist, {1}]
giving the expected output:
{{Subscript[a, 1],Subscript[a, 2],Subscript[a, 3]},{Subscript[a,
4],Subscript[a, 5],Subscript[a, 6]},{Subscript[a, 7],Subscript[a,
8],Subscript[a, 9]}}
The problem arises when the number of entries in the ReplaceAll list
(ie,{x_,y_,z_}) is the same as the number of sublists in the target list
(The same problem occurs with the following)
Partition[Range[16], {4}]/.{w_,x_,y_,z_}->
{Subscript[a,w],Subscript[a,x],Subscript[a,y],Subscript[a,z]}
Is this a bug or is such behaviour expected (and if so, what am I missing?)
Is thre a way of telling ReplaceAll what level to use (so that it ALWAYS
produces the
expected result)?
The more general problem I have is that lists of this type are generated by
a program, and everything is well unless the generated list happens to have
3 sublists. I can fix things using Replace, but should I have predicted
such a problem occurring?
I would be interested in your thoughts, and in better workarounds (and in
better approaches).
Thanks
Thomas Dowling