[Date Index]
[Thread Index]
[Author Index]
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
Prev by Date:
**RE: Help to clarify 'Map', 'Apply', and 'Thread'.**
Next by Date:
**Re: conditional pattern question**
Previous by thread:
**Re: conditional pattern question**
Next by thread:
**Re: conditional pattern question**
| |