Re: Newbie Programming question
- To: mathgroup at smc.vnet.net
- Subject: [mg53443] Re: [mg53436] Newbie Programming question
- From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com>
- Date: Wed, 12 Jan 2005 03:41:13 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
>-----Original Message----- >From: Kerry Kim [mailto:kjkim at u.washington.edu] To: mathgroup at smc.vnet.net >Sent: Tuesday, January 11, 2005 7:32 AM >To: mathgroup at smc.vnet.net >Subject: [mg53443] [mg53436] Newbie Programming question > >Hello, > >Is there any way in Mathematica to store/assign a value to a >variable whose name is in a string? In other words something >like this: > >i = 17; >foo="var" + ToString[i]; >SomeFunctionThatConvertsStringToSymbolName[foo] = 17; > >and then assign some value (say, 23) to the variable whose >name is contained in the foo string? (i.e. var17=23) > >Thanks! > > Kerry, This is not quite so easy, and for the beginning I'd not recommend to persue such ideas (there are clearer choices for indirection). However, you might like to observe this: In[1]:= i = 17; fooString = "var" <> ToString[i]; In[3]:= fooSym = Symbol[fooString] Out[3]= var17 In[4]:= Evaluate[fooSym] = 17 Out[4]= 17 In[5]:= var17 Out[5]= 17 Now In[6]:= MakeExpression[fooString] Out[6]= HoldComplete[var17] In[7]:= Unevaluated @@ MakeExpression[fooString] Out[7]= Unevaluated[var17] In[8]:= With[{variable = Unevaluated @@ MakeExpression[fooString]}, variable = 23] Out[8]= 23 In[9]:= var17 Out[9]= 23 In[10]:= fooString // InputForm Out[10]//InputForm= "var17" Another possibility would be to work with unevaluated symbols as values (to be referenced): In[16]:= Quit[] In[1]:= i = 17; fooString = "var" <> ToString[i]; In[3]:= (fooSym = Unevaluated@Unevaluated[#]) &@ Symbol[fooString] Out[3]= Unevaluated[var17] In[4]:= ?fooSym Global`fooSym fooSym = Unevaluated[var17] In[5]:= (# = 17) &@ fooSym Out[5]= 17 In[6]:= var17 Out[6]= 17 In[7]:= (# = 23) &@ fooSym Out[7]= 23 In[8]:= var17 Out[8]= 23 In[9]:= fooSym Out[9]= Unevaluated[var17] -- Hartmut Wolf