Re: A test with options
- To: mathgroup at smc.vnet.net
 - Subject: [mg65434] Re: [mg65414] A test with options
 - From: "Carl K. Woll" <carlw at wolfram.com>
 - Date: Sat, 1 Apr 2006 05:38:52 -0500 (EST)
 - References: <200603311109.GAA15023@smc.vnet.net>
 - Sender: owner-wri-mathgroup at wolfram.com
 
Goyder Dr HGD wrote:
> Below I create a test with an option and a function dependant upon the
> test. As I see it the function fails to operate as I anticipated. So I
> am missing something and need help understanding. 
> 
> In[1]:=
> ClearAll[TestQ]; 
> Options[TestQ] = {EvaluationRequired -> False}; 
> TestQ[a_] := EvaluationRequired /. Options[TestQ]; 
> 
> In[4]:=
> ClearAll[f]; 
> f[(a_)?TestQ] := {100*a}
> 
> In[6]:=
> a1 = f[Cos[0]]
> 
> Out[6]=
> f[1]
> 
> In[7]:=
> (* This is as expected the function input fails the test. Now change the
> test option.*)
> 
> In[8]:=
> SetOptions[TestQ, EvaluationRequired -> True]; 
> 
> In[9]:=
> a2 = f[Cos[0]]
> 
> Out[9]=
> {100}
> 
> In[10]:=
> (* This is as expected the function input passes the test. *)
> 
> In[11]:=
> b = a1
> 
> Out[11]=
> f[1]
> 
> (* Now I am lost. Why in a new evaluation did the function input not get
> retested and pass the test? *)
> 
You need to use Update:
In[10]:=
Update[f]
b=a1
Out[11]=
{100}
> In[13]:=
> c = 100 + 100 + a1
> 
> Out[13]=
> 200 + f[1]
> 
> 
> Here are my questions
> 
> 1. Can anyone explain why the function f is not evaluated again with the
> new version of TestQ when I write b = a1 ?
> 
> 2. How can I make this work so that a function that does not evaluate,
> because the test fails, can be made to work once the test has been
> changed?
> 
> This is a toy example the background is that I wish to construct a
> function where the degree of evaluation that takes place is
> controllable.
> 
> Thanks 
> 
> Hugh Goyder
> 
Carl Woll
Wolfram Research