Re: conditional pattern question
- To: mathgroup at smc.vnet.net
- Subject: [mg15695] Re: [mg15687] conditional pattern question
- From: Jurgen Tischer <jtischer at col2.telecom.com.co>
- Date: Mon, 1 Feb 1999 14:54:14 -0500 (EST)
- Organization: Universidad del Valle
- References: <199901310806.DAA14392@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
David, I think first of all you should read (again) 2.5.6 Evaluation in Patterns, Rules and Definitions (as I did after quite a while of guessing about in your example). I don't say it explains everything, but at least the guesses should become more educated. Now I make your example worse (after I read 2.5.6 and I thought I understood what's going on.) With your first definition of f, define now In[5']:= f[y]:=3 and no evaluation with NumericWithMessageQ is taking place! Jurgen David Reiss wrote: > > 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