A test with options

*To*: mathgroup at smc.vnet.net*Subject*: [mg65414] A test with options*From*: "Goyder Dr HGD" <h.g.d.goyder at cranfield.ac.uk>*Date*: Fri, 31 Mar 2006 06:09:07 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

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? *) 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 -- This message has been scanned for viruses and dangerous content by the Cranfield MailScanner, and is believed to be clean.