Re: Problems with Evaluate[Symbol[xxx]]
- To: mathgroup at smc.vnet.net
- Subject: [mg102808] Re: Problems with Evaluate[Symbol[xxx]]
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Thu, 27 Aug 2009 06:38:45 -0400 (EDT)
- References: <h73760$b6u$1@smc.vnet.net>
Hi,
I think everything works fine, you were just using listIdentifier
instead of myListIdentifier in some places...
> In[602]:= (*Make an identifier string to hold some data*)
> myListIdentifier = "abc"
>
> Out[602]= "abc"
>
> In[603]:= (*here's the data*)
> myList = {{7, 8}}
>
> Out[603]= {{7, 8}}
>
> In[604]:= (*Now put the data into a variable with name abc*)
> Evaluate[Symbol[myListIdentifier]] = myList
>
> During evaluation of In[604]:= Set::setraw: Cannot assign to raw \
> object 7. >>
>
> During evaluation of In[604]:= Set::setraw: Cannot assign to raw \
> object 8. >>
>
> Out[604]= {{7, 8}}
The error messages here come from the fact that there are already
definitions for abc when you do this, you can avoid them with:
Clear[Evaluate[myListIdentifier]]
Evaluate[Symbol[myListIdentifier]] = myList
actually when you need to control which parts of an expression need
evaluation, you should have a look at With, e.g.:
With[{symbolname = myListIdentifier},
Clear[symbolname];
Evaluate[symbolname] = myList
]
> In[605]:=
> (*Check abc holds the correct data*)
> abc
>
> Out[605]= {{7, 8}}
>
> In[606]:= (*Check the data can also be accessed using the \
> myListIdentifier*)
>
> In[607]:= Evaluate[Symbol[myListIdentifier]]
>
> Out[607]= {{7, 8}}
Here you don't need Evaluate, just Symbol[myListIdentifier] ist just a
good...
> In[608]:= (*But apparently the two items are not equal... why??*)
> abc == Evaluate[Symbol[listIdentifier]]
>
> Out[608]= False
Change listIdentifier to myListIdentifier here, and it will work.
Again, no Evaluate neede here, on the other hand, it does no harm.
> In[609]:= (*Even worse, I can append using the reference abc, but not
> \
> using the myListIdentifier*)
> Append[abc, {3}]
>
> Out[609]= {{7, 8}, {3}}
>
> In[610]:= Append[Evaluate[Symbol[listIdentifier]], {3}]
>
> Out[610]= {{3}}
>
Again, replace listIdentifier and Evaluate is not needed.
hth,
albert