MathGroup Archive 1996

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re-evaluation of Conditional expressions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg3479] Re: Re-evaluation of Conditional expressions
  • From: pecora at zoltar.nrl.navy.mil (Louis M. Pecora)
  • Date: Sat, 16 Mar 1996 22:38:35 -0500
  • Organization: Naval Research Laboratory
  • Sender: owner-wri-mathgroup at wolfram.com

In article <4i5q7t$rtt at dragonfly.wolfram.com>, withoff at wolfram.com (David
Withoff) wrote:

> In article <4hr6d7$84u at dragonfly.wolfram.com> quinton at irisa.fr (Patrice  
> Quinton) writes:
> > 
> > While teaching Mathematica, I found the following quite strange
> > behaviour of Conditional expressions in Mathematica. Define symbol y as  
> follows:
> > 
> > y = If[x,1,2]
> > 
> > (* Then set x to True and revaluate y *)
> > x=True;y
> > 
> > (* as expected, the answer is 1 *)
> > (* Now, set x to z, a fresh symbol, and evaluate y *)
> > Clear[x,z];x=z;y
> > 
> > (* The result is If[x,1,2] *)
> > 
> > (* Finally, set z to True, and evaluate y *)
> > z=True;y
> > 
> > The result is still If[x,1,2], although a re-evaluation of x gives True,  
> as
> > expected. 
> > 
> > The only way to get a re-evaluation of y is to use the function Update:
> > 
> > Update[];y 
> > 
> > which gives the result 1. In summary, it seems that If is re-evaluated  
> only if
> > the expression that assigned to x has changed, and not when the value of  
> x has
> > changed. 
> 
> This and similar situations represent the entire purpose of Update.
> Once an expression has evaluated to itself, Mathematica will not
> re-evaluate the expression unless something inside the expression
> changes.  In this example, nothing inside If[x,1,2] changed, so
> the expression is not re-evaluated.  This is an important optimization,
> and is exactly what you want in the vast majority of cases.  The
> Update function is included for those rare situations when you
> want an expression to be re-evaluated even though nothing inside
> the expression has changed.

How about holding the evaluation in the definition of y?  Then it would
evaluate correctly each time.  Would   y := If[x,1,2] do it?

-- 
Louis M. Pecora
pecora at zoltar.nrl.navy.mil

/* My views and opinions are not those of the U.S. Navy.
   If you want those, you have to start a war.  */

==== [MESSAGE SEPARATOR] ====


  • Prev by Date: mathematica vs.mathcad vs. maple
  • Next by Date: Re: Printing/TeX
  • Previous by thread: Re: Re-evaluation of Conditional expressions
  • Next by thread: Re: Re-evaluation of Conditional expressions