Re: Unexpected non-evaluation problem
- To: mathgroup at smc.vnet.net
- Subject: [mg63180] Re: Unexpected non-evaluation problem
- From: David Bailey <dave at Remove_Thisdbailey.co.uk>
- Date: Sat, 17 Dec 2005 03:46:13 -0500 (EST)
- References: <dnrmp1$prb$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Bob,
That got me thinking if I could construct something that would behave in
the same way:
flag=False;
foo[x_]:=x^2/;flag
ss = foo[x]
foo[x]
flag=True;
ss
foo[x]
{ss,foo[x]}
{foo[x],x^2}
ToExpression[ToString[ss]]
x^2
ss/. x->y
y^2
I think expressions like that give a little glimpse at the inner
workings of Mathematica. These system normally behaves as though it
tried to evaluate expressions at every possible opportunity, but for
efficiency reasons it obviously remembers when a sub expression is fully
evaluated. The above code tricks it into thinking that the expression
foo[x] is fully evaluated even when it isn't. It is interesting that the
expression survives unchanged as part of a larger expression - it is
only when the subexpression is changed with the ReplaceAll that
Mathematica 'realises' its mistake!
I think something vaguely similar must be happening in the original
fourier transform example.
David Bailey
http://www.dbaileyconsultancy.co.uk