conditional pattern question
- To: mathgroup at smc.vnet.net
- Subject: [mg15687] conditional pattern question
- From: dreissBLOOP at bloop.earthlink.net (David Reiss)
- Date: Sun, 31 Jan 1999 03:06:09 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
I don't understand the following behavior: could someone educate me here? ...or is it a bug? First clear the functions and variables. In[1]:= ClearAll[NumericWithMessageQ,f]; Now define a message: In[2]:= Test::testmessage="The argument `1` has generated this message."; Introduce a boolian test that has the added side effect of generating a message when the test yields False (I am using NumericQ as an example, but the problem that I am illustrating is independent of this): In[3]:= NumericWithMessageQ[z_]:= If[NumericQ[z], True, Message[Test::testmessage,z];False] Now give a function definition for numeric values of the argument In[4]:= f[y_?NumericWithMessageQ]:=1; Also give a definition for all other cases: the message defind a bove is generated when this is executed-- I didn't expect this to happen. That the message is generated at this point puzzels me. I don't understand why this happens. In[5]:= f[y_]:=2; Test::"testmessage": "The argument \!\(y_\) has generated this message." Note though that the function works properly. Here is a numeric case: In[6]:= f[4] Out[6]= 1 And here is a non-numeric case (and the message is generated as per the design). In[7]:= f[a] Test::"testmessage": "The argument \!\(a\) has generated this message." Out[7]= 2 If the function is specified as follows, the message is not generated unexpectedly when the function is defined. In[8]:= ClearAll[f] In[9]:= f[y_]/;NumericWithMessageQ[y]:=1; In[10]:= f[y_]:=2; And the function works as above. In[11]:= f[4] Out[11]= 1 In[12]:= f[a] Test::"testmessage": "The argument \!\(a\) has generated this message." Out[12]= 2 -- ---------------------------------------- Scientific Arts: Creative Services and Consultation for the Applied and Pure Sciences David Reiss Email: dreiss at !SPAMscientificarts.com ---------------------------------------- Remove the !SPAM to send email