Re: Symbols, names, objects
- To: mathgroup at smc.vnet.net
- Subject: [mg6522] Re: [mg6515] Symbols, names, objects
- From: Tom Wickham-Jones <twj>
- Date: Sun, 30 Mar 1997 22:23:55 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Murray Eisenberg wrote:
>
> I need a function, let's call it Store, that takes two strings as
> arguments -- the NAMES of two variables the second ov which variables
> currently has some value -- and that causes the value in that variable
> to be assigned to the symbol. (I don't care what the result returned
> by the function is; Null will do just fine.) For example:
>
> temp = {1, 2, 3};
> Store["x", "temp"]
>
> After evaluating those expressions, the list {1,2,3} of numbers would
> be assigned to the variable x.
>
> I tried the "obvious" thing:
>
> Store[newvar_String, datavar_String] :=
> (newvar<>"="<>datavar; Null)
>
> but that does not work. I've tried various alternatives, such as
> inserting "Evaluate@"<> just before datavar in the above definition,
> but that doesn't do it, either.
>
> More generally, I'd like Store to be able to accept as second argument
> the string representation of any expression, where such expression,
> when evaluated, give the value to be assigned to newvar.
If you want to turn a string into a symbol you will have to parse it which
you can do with ToExpression. So one version of Store is...
In[7]:= Store[newvar_String, datavar_String] :=
ToExpression[ newvar <> "=" <> datavar]
In[8]:= temp = {1, 2, 3};
In[9]:= Store["x", "temp"]
Out[9]= {1, 2, 3}
In[10]:= x
Out[10]= {1, 2, 3}
This will fail if the newvar input is not something that take a value
or if the datavar does not represent valid syntax.
In[16]:= Store[ "\"x\"", "foo"]
Set::setraw: Cannot assign to raw object x.
Out[16]= foo
In[17]:= Store[ "x", "{"]
ToExpression::sntxi: Incomplete expression; more input is needed.
Out[17]= $Failed
In Mathematica the expressions that can take values are symbols
and expressions with a head that can take a value. In In[16]
the attempt was made to assign a value to a string which is not permitted.
Tom Wickham-Jones
WRI