Re: Confusing behaviour with caching of evaluated expressions ?
- To: mathgroup at smc.vnet.net
- Subject: [mg63740] Re: [mg63727] Confusing behaviour with caching of evaluated expressions ?
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Fri, 13 Jan 2006 04:48:17 -0500 (EST)
- Reply-to: hanlonr at cox.net
- Sender: owner-wri-mathgroup at wolfram.com
Presumably it is done to make evaluations more efficient. SuperFullActuallyEvaluate[expr_]:= expr//ToString//ToExpression; Clear[F,flag]; F[x_]:=G/;flag==1 expr1=F[z1]; expr2:=F[z2]; flag=0; {F[z1],F[z2],expr1,expr2}// SuperFullActuallyEvaluate {F[z1],F[z2],F[z1],F[z2]} flag=1; {F[z1],F[z2],expr1,expr2}// SuperFullActuallyEvaluate {G,G,G,G} flag=0; {F[z1],F[z2],expr1,expr2}// SuperFullActuallyEvaluate {F[z1],F[z2],F[z1],F[z2]} Bob Hanlon > > From: Chris Rodgers <rodgers at physchem.NOSPAMox.aREMOVEc.uk> To: mathgroup at smc.vnet.net > Subject: [mg63740] [mg63727] Confusing behaviour with caching of evaluated expressions ? > > Hi, > > Can anyone shed any light upon the following unexpected output from > Mathematica? > > I have come across some rather strange behaviour in the way Mathematica > handles expressions which depend on a "flag" variable e.g.: > > F[x_] := G /; flag==1 > > It appears that Mathematica forgets that flag is a variable that might > change in the future. Thus, if one defines another expression e.g.: > > flag=0 > expr1= F[z1] > expr2:=F[z2] > > expr1 and expr2 will both currently evaluate to F[z1] and F[z2] as > expected. BUT, if we now change the flag and try to prod them into > evaluating to give G, things become tricky: > > flag=1 > expr1 > expr2 > Evaluate[expr1] > Evaluate[expr2] > FullSimplify[expr1] > FullSimplify[expr2] > > Even doing something like > > F[z1] > expr1 > > doesn't work. (The F[z1] returns G correctly, but expr1 doesn't realise > that it should change to give G.) > > The only way to make it work again seems to be to "change" z1 or z2. For > example, > > z1=z1+0 > expr1 > > RandomFunctionIMadeUp[z2]^:=33 > expr2 > > These two assignments are enough to make Mathematica update its cache (?). > > Can anyone explain to me why this might be "by design"? > > Can anyone tell me a way to make Mathematica fully evaluate an > expression e.g. expr1 without getting stuck in this way? Is there a > SuperFullActuallyEvaluate[expr1] commmand?? :-) > > Many thanks in advance, > > Chris. > >