Re: Mathematica language issues

*To*: mathgroup at smc.vnet.net*Subject*: [mg53032] Re: Mathematica language issues*From*: David Bailey <dave at Remove_Thisdbailey.co.uk>*Date*: Mon, 20 Dec 2004 06:35:13 -0500 (EST)*References*: <200412171020.FAA16185@smc.vnet.net> <cq0tm1$2m2$1@smc.vnet.net> <cq3p4m$hs8$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Maxim wrote: > On Sat, 18 Dec 2004 09:36:01 +0000 (UTC), Andrzej Kozlowski > <akoz at mimuw.edu.pl> wrote: > > >>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/ >> > > > I do not agree. Suppose we evaluate z*Unevaluated[1 + 1]; according to > your explanation, after the reordering of the factors Unevaluated should > disappear from the final result. However, the expression evaluates to > Unevaluated[1 + 1]*z. Further, suppose we take Unevaluated[1 > + 1]*Sin[Pi/4]: Sin[Pi/4] evaluates to 1/Sqrt[2], so in this case an > evaluation step definitely takes place; however, the output is > Unevaluated[1 + 1]/Sqrt[2]. Your theory simply doesn't work. But even if > it did, there is another problem: suppose I use Sin[Pi/8] instead of > Sin[Pi/4] -- then first you would need to know whether Mathematica has a > built-in rule for Sin[Pi/8] to arrive at any conclusion as to how it might > work with Unevaluated (that is, what will count as an evaluation step?). > So to apply your explanation we would have to search through all the > built-in rules of Mathematica. > > Maxim Rytin > m.r at inbox.ru > Hi, Unevaluated does indeed seem inconsistent. Consider the following tests: SetAttributes[foo,Orderless] foo[Unevaluated[1+1],2] foo[2,Unevaluated[1+1]] foo[2,Unevaluated[1+1]] foo[2,Unevaluated[1+1]] I suppose my only objection to your original post is the implication that the glitches that you report are a really big deal - I mean people DO use Mathematica successfully in all sorts of research! The other thing to remember here is that it can be very dangerous to change things like this - because you can break existing code that relies on such quirks - probably by mistake. David Bailey dbaileyconsultancy.co.uk

**References**:**Mathematica language issues***From:*ab_def@prontomail.com (Maxim)