Re: [m1220] Equating a variable and its value

• To: mathgroup at christensen.cybernetics.net
• Subject: [mg1260] Re: [m1220] Equating a variable and its value
• From: Anthony Rebello <arebello at knox.edu>
• Date: Mon, 29 May 1995 03:08:51 -0400

```On Fri, 26 May 1995, Jan Snellman wrote:

> Hello folks.
>
> 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?
>
> Regards,
> Jan Snellman	jans at matematik.su.se
>
>

In[2]:=
Attributes[Function]
Out[2]=
{HoldAll, Protected}

The problem is that Function has the attriibute
HoldAll, which means that nothing in the expression Times[#,m]& will be
evaluated until after the function has been applied somewhere.  So by
clearing m before using mult you really are never letting the m in
Times[#,m]& get replaced by 3.  I tried several implementations of
Evaluate and ReleaseHold but nothing would force the replacement of m
early enough.  The only solution seems to be to temporarily remove the
HoldAll attribute from Function.  Here is an example of how that could be
done.

In[16]:=
ClearAttributes[Function,{Protected,HoldAll}]
m=3; mult=Times[#,m]&; Clear[m]; mult[10]
SetAttributes[Function,{Protected,HoldAll}]
Out[17]=
30

NUMBERS-ARE-THE-ROOT-OF-ALL-EVIL..NUMBERS_A
.                                         R
L                                         E
I             Anthony Rebello             |
V              Knox  College              T
E             Math Department             H
|                                         E
L                                         |
LA-FO-TOOR-EHT-ERA-SREBMUN.LIVE-LLA-FO-TOOR

```

• Prev by Date: Numerous Functional Forms
• Next by Date: COMPILATION OF ROUTINES USING LISTS OF REALS
• Previous by thread: Re: Numerous Functional Forms
• Next by thread: Re: [m1220] Equating a variable and its value