Re: [m1220] Equating a variable and its value
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1267] Re: [m1220] Equating a variable and its value
- From: Allan Hayes <hay at haystack.demon.co.uk>
- Date: Wed, 31 May 1995 02:15:37 -0400
Jan Snellman <jans at matematik.su.se> [m1220] Equating a variable and its value writes > Study this codelet: > > m=3; mult=Times[#,m]&; Clear[m]; mult[10] > > To my dismay, I get 10 m, not 30. > How can i convince Mathematica that only pedants make the > distinction > between a variable and its value? Jan, First notice In[2]:= FullForm[Times[#,m]&] Out[2]//FullForm= Function[Times[Slot[1], m]] Now here is your example step by step In[3]:= mult=Times[#,m]& (*Function is HoldAll so m is mot evaluated*) Out[3]= #1 m & In[4]:= Clear[m](*Clear is HoldAll;m is cleared, not 3; m now has no value*) In[5]:= mult[10] (*10 replaces # in Times[#,m]& and then Function is stripped off but now m has no value*) Out[5]= 10 m To get what you want; In[6]:= m=3 Out[6]= 3 In[7]:= mult= Evaluate[Times[#,m]]& (*override HoldAll, force evaluation*) Out[7]= 3 #1 & In[8]:= Clear[m] In[9]:= mult[10] Out[9]= 30 If you want to specifically limit evaluation to m then you can use In[10]:= mult= With[{m=3},Times[#,m]&] Out[10]= #1 3 & The distinction between an expression and its value is crucial in any symbolic system, in mathematics and in ordinary language. Allan Hayes hay at haystack.demon.co.uk