RE: Assigning to a sublist

• To: mathgroup at smc.vnet.net
• Subject: [mg35171] RE: [mg35161] Assigning to a sublist
• From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com>
• Date: Fri, 28 Jun 2002 02:30:59 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```> -----Original Message-----
> From: Bob Harris [mailto:nitlion at mindspring.com]
To: mathgroup at smc.vnet.net
> Sent: Thursday, June 27, 2002 6:24 AM
> To: mathgroup at smc.vnet.net
> Subject: [mg35171] [mg35161] Assigning to a sublist
>
>
> Howdy,
>
> I'm trying to assign a new value to an entry in a sublist (of
> another list),
> and I can't understand why it won't work.
>
> For example, I do the following:
>
>   In[1]:= zz = {{2, {{1, 1}}}, {10, {{3, 1}}}, {5, {{2, 1}}}}
>   Out[1]= {{2, {{1, 1}}}, {10, {{3, 1}}}, {5, {{2, 1}}}}
>
>   In[2]:= zz[[3]][[2]]
>   Out[2]= {{2, 1}}
>
>   In[3]:= Append[zz[[3]][[2]], {1, 1, 1, 1, 1}]
>   Out[3]= {{2, 1}, {1, 1, 1, 1, 1}}
>
>   In[4]:= zz[[3]][[2]] = Append[zz[[3]][[2]], {1, 1, 1, 1, 1}]
>   Set::"setps : zz[[3]] in assignment of part is not a symbol."
>   Out[4]= {{2, 1}, {1, 1, 1, 1, 1}}
>
> For some reason it doesn't like the assignment.  What
> confuses me is that is
> zz[[3]][[2]] were just a variable, it would work.  Further,
> if it were just
> an entry at the *top* level of a list, it would work, as this
> example shows:
>
>   In[5]:= yy = zz[[3]]
>   Out[5]= {5, {{2, 1}}}
>
>   In[6]:= yy[[2]]
>   Out[6]= {{2, 1}}
>
>   In[7]:= yy[[2]] = Append[yy[[2]], {1, 1, 1, 1, 1}]
>   Out[7]= {{2, 1}, {1, 1, 1, 1, 1}}
>
> So it seems like the issue is just that deeply nested things
> don't behave
> like things that are not as deeply nested.  Am I right about
> that?  How can
> I modify an entry in a sublist?
>
> Thanks,
> Bob H
>
>

Bob,

observe

In[1]:= zz = {{2, {{1, 1}}}, {10, {{3, 1}}}, {5, {{2, 1}}}}
Out[1]= {{2, {{1, 1}}}, {10, {{3, 1}}}, {5, {{2, 1}}}}

In[2]:= zz[[3, 2]] = Append[zz[[3]][[2]], {1, 1, 1, 1, 1}]
Out[2]= {{2, 1}, {1, 1, 1, 1, 1}}

In[3]:= zz
Out[3]=
{{2, {{1, 1}}}, {10, {{3, 1}}}, {5, {{2, 1}, {1, 1, 1, 1, 1}}}}

So here at the lhs of Set zz[[3]][[2]] is not the same as zz[[3, 2]]

In[4]:= Hold[zz[[3]][[2]]] // FullForm
Out[4]//FullForm= Hold[Part[Part[zz, 3], 2]]

In[5]:= Hold[zz[[3, 2]]] // FullForm
Out[5]//FullForm= Hold[Part[zz, 3, 2]]

Set looks at the first element of Part at the (unevaluated) lhs, this must
be symbol, and zz[[3]] is none, as the error message tells. Set does not
look down further, clearly on reasons of performance. So just use simple
Part.

--
Hartmut

```

• Prev by Date: RE: Assigning to a sublist
• Next by Date: Re: Looking for a program that transforms Mathematica to Matlab expressions!!!
• Previous by thread: RE: Assigning to a sublist
• Next by thread: RE: Assigning to a sublist