Re: problem with Mathematica
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg493] Re: problem with Mathematica
- From: withoff (David Withoff)
- Date: Mon, 27 Feb 1995 10:52:03 -0600
I have a problem with Mathematica. I have looked for
this problem in MathGroup, but I haven't been successful yet. Maybe
you could point me some useful reference or put this problem on
MathGroup or explain the reason for following behavior:
In[1] := ClearAll[a, o, doit, done]
Out[1] = o = a[2];
In[2] := a[_] := done /; doit
In[5] := doit = False;
If `doit' is set to `False' it works as I would expected only the
first time.
In[6] := Trace[o]
Out[6] = {o, a[2], {{doit, False}, RuleCondition[done, False],
Fail}, a[2]}
The second time the delayed rule is not evaluated. Why?
In[7] := Trace[o]
Out[7] = {o, a[2]}
Best Regards,
Pavel Krtous
-------------------------------------------
An explanation of this behavior can be found in the documentation
for the Update function in the Mathematica book (page 310 and page 892).
Expressions are evaluated only when something inside of the expression
has changed. If you make a change to something that does not appear
anywhere in the expression, then you need to use Update.
In[1]:= o = a[2];
In[2]:= a[_] := done /; doit
In[3]:= doit = False;
In[4]:= Trace[o]
Out[4]= {o, a[2], {{doit, False}, RuleCondition[done, False], Fail}, a[2]}
In[5]:= Trace[o]
Out[5]= {o, a[2]}
In[6]:= Update[a]
In[7]:= Trace[o]
Out[7]= {o, a[2], {{doit, False}, RuleCondition[done, False], Fail}, a[2]}
Dave Withoff
Research and Development
Wolfram Research