MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

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



  • Prev by Date: Suggestions for improving speed
  • Next by Date: Re: Speeding up InterpolatingFunction
  • Previous by thread: Re: Suggestions for improving speed
  • Next by thread: Re: Strange Behaviour of ReplaceAll with Subscript (A bug or what?)