MathGroup Archive 2010

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

Search the Archive

Re: Strange Behaviour of ReplaceAll with Subscript (A bug or what?)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg113343] Re: Strange Behaviour of ReplaceAll with Subscript (A bug or what?)
  • From: Andrea <btlgs2000 at gmail.com>
  • Date: Sun, 24 Oct 2010 06:06:27 -0400 (EDT)
  • References: <i9ufjj$rjf$1@smc.vnet.net>

On Oct 23, 1:06 pm, Thomas Dowling <thomasgdowl... at gmail.com> wrote:
> 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 ha=
ve
> 3 sublists.  I can fix things using Replace, but should I have predicte=
d
> such a problem occurring?
>
> I would be interested in your thoughts, and in better workarounds (and in
> better approaches).
>
> Thanks
>
> Thomas Dowling

Hi Thomas, the behaviour of ReplaceAll is as expected.
ReplaceAll try to match the pattern at any level (to the whole
expression too) starting from the highest to the lowest.
In the case of list2 the first match is with the whole expression
cause actually it is a list of three elements (list themselves) as you
specified in your pattern {x_,y_,z_}.
You have to specify in the pattern that your elements are numbers.
E.g. you can write
list2 /. x : {_?NumberQ ..} :> Map[Subscript[a, #] &, x]
so that the substitution apply only to list of at least one number


  • Prev by Date: Re: Strange Behaviour of ReplaceAll with Subscript (A bug or what?)
  • Next by Date: Re: Strange Behaviour of ReplaceAll with Subscript (A bug or what?)
  • Previous by thread: Re: Strange Behaviour of ReplaceAll with Subscript (A bug or what?)
  • Next by thread: Re: Strange Behaviour of ReplaceAll with Subscript (A bug or what?)