Re: Mathematica language issues
- To: mathgroup at smc.vnet.net
- Subject: [mg52970] Re: [mg52955] Mathematica language issues
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sat, 18 Dec 2004 03:59:46 -0500 (EST)
- References: <200412171020.FAA16185@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On 17 Dec 2004, at 19:20, Maxim wrote:
> In[5]:=
> Unevaluated[1 + 1]*2
> 2*Unevaluated[1 + 1]
>
> Out[5]=
> 4
>
> Out[6]=
> 2*Unevaluated[1 + 1]
>
This is not a glitch but works exactly as one woudl expect. You can
see the difference and the reason by looking at Trace in both cases
(although there is no need for that, if you understand Unevaluated you
can see it right away).
First:
2*Unevaluated[1+1]//Trace
{2 (1+1),2 Unevaluated[1+1]}
First Unevaluated is stipped away and Mathematica attempts ot evaluate
2*(1+1). Since it knows no rule to apply and the expression has not
changed Unevaluated is restored and evaluation is completed with the
output you see.
Unevaluated[1+1]*2//Trace
{(1+1) 2,2 (1+1),{1+1,2},2 2,4}
As before, first Unevaluated is stripped away and Mathematica tires to
evaluate 2*(1+1). It now knows a rule to apply, which is given by the
Orderless attribute and the canonical ordering, so it converts the
expression into the form 2 (1+1). But now Unevaluated is not restored
because the expression has changed so evaluation continues with 1+1
evaluationg to 2 and finally you obtain 4.
Now, I have honstly considered this case only because I could see at
once what what was going on. I do not knwo if any of the others are
glitches but jusdging by my experience with the past "language
glitches" you have reported (unlike the more serious problems desribed
in your last posting) I rather doubt it. However I have no time to
spend on this just to prove a point (again).
Andrzej Kozlowski
Chiba, Japan
http://www.akikoz.net/~andrzej/
http://www.mimuw.edu.pl/~akoz/
- References:
- Mathematica language issues
- From: ab_def@prontomail.com (Maxim)
- Mathematica language issues