|
[Date Index]
[Thread Index]
[Author Index]
Re: About Condition and HoldAll
- To: mathgroup at smc.vnet.net
- Subject: [mg76088] Re: [mg76030] About Condition and HoldAll
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Wed, 16 May 2007 05:25:19 -0400 (EDT)
- References: <200705150848.EAA16743@smc.vnet.net>
On 15 May 2007, at 17:48, solidifire wrote:
> In[1]:= {f[1 + 1, 2 + 3], g[1 + 1, 2 + 3], h[1 + 1, 2 + 3]}
> Out[1]= {f[2, 5], g[2, 5], h[2, 5]}
>
> In[2]:= SetAttributes[f, HoldAll]
>
> In[3]:= SetAttributes[g, HoldRest]
>
> In[4]:= {f[1 + 1, 2 + 3], g[1 + 1, 2 + 3], h[1 + 1, 2 + 3]}
> Out[4]= {f[1 + 1, 2 + 3], g[2, 2 + 3], h[2, 5]}
>
> In[5]:= Attributes[Condition]
> Out[5]= {HoldAll, Protected}
>
> In[6]:= Condition[1 + 1, 2 + 3]
> Out[6]= 2 /; 2 + 3
>
> The version of Mathematica is 5.0 for Microsoft Windows.
>
> My question is that why does Condition behave as having HoldRest
> as attribute although the attribute is HoldAll actually?
>
>
The "evaluation" of 1+1 that you see is not "pre-evaluation" but
"post-evaluation". The difference between pre-evaluatio nand post-
evlaution can be seen on this simple example:
In[1]:= SetAttributes[f, HoldAll]
In[2]:= f[x_] := x
In[3]:= f[1 + 1]
Out[3]= 2
Since f has a HoldAll attribute 1+1 was not pre-evaluated by it was
still post-evaluated.
You can see the working of the HodlAll attribute here:
g[t_] := Condition[Print["evaluated"], t]
Note that:
g[True]
"evaluated"
g[False]
g(False)
Clearly, if Condition pre-evaluated the first argument it would have
printed "evalauted" no matter what the value of t was.
By contrast, If has attribute HoldRest so, if we define:
h[t_] := If[Print["evaluated"]; t, Print[1], Print[0]]
h[True]
"evaluated"
1
h[False]
"evaluated"
0
"evaluated" always gets printed, but 1 or 0 are printed depending on
the value of t.
ALso, note that the behaviour of Condition seems hard coded and can't
be changed by changing its attributes.
Andrzej Kozlowski
Prev by Date:
Re: a tutorial finder palette
Next by Date:
Re: Re: Re: What happened to the
Previous by thread:
About Condition and HoldAll
Next by thread:
Re: About Condition and HoldAll
|