Re: Thread and Set
- To: mathgroup at smc.vnet.net
- Subject: [mg14568] Re: Thread and Set
- From: "P.J. Hinton" <paulh>
- Date: Fri, 30 Oct 1998 03:07:38 -0500
- Organization: "Wolfram Research, Inc."
- References: <719f85$lcb@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On 29 Oct 1998, Alex Tabarrok wrote:
> I'd like to use Thread and Set to define a number of variables. The
> following works as expected:
>
> In[86]:=Clear[a,b]
> In[87]:=Thread[Set[{a,b},{1,2}]]
> Out[87]={1,2}
> In[88]:=a
> Out[88]=1
> In[89]:=b
> Out[89]=2
>
> But why doesn't the following work?
>
> In[101]:=Clear[a,b]
> In[102]:=vars={a,b}
> Out[102]={a,b}
> In[103]:=nums={1,2}
> Out[103]={1,2}
> In[104]:=Thread[Set[vars,nums]]
> Out[104]={1,2}
> In[105]:=a
> Out[105]=a
> In[106]:=b
> Out[106]=b
> In[107]:=vars
> Out[107]={1,2}
The behavior you're observing is due to the fact that Set[] has the
attribute HoldFirst. Try wrapping Evaluate[] around vars.
In[1]:= vars={a,b}
Out[1]= {a, b}
In[2]:= nums={1,2}
Out[2]= {1, 2}
In[3]:= Thread[Set[Evaluate[vars], nums]]
Out[3]= {1, 2}
In[4]:= a
Out[4]= 1
In[5]:= b
Out[5]= 2
--
P.J. Hinton
Mathematica Programming Group paulh at wolfram.com Wolfram
Research, Inc. http://www.wolfram.com/~paulh/
Disclaimer: Opinions expressed herein are those of the author alone.