Re: Checking function syntax
- To: mathgroup at smc.vnet.net
- Subject: [mg64605] Re: Checking function syntax
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Thu, 23 Feb 2006 00:35:54 -0500 (EST)
- Organization: The University of Western Australia
- References: <dthh6f$nai$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <dthh6f$nai$1 at smc.vnet.net>, Chris Rodgers <rodgers at physchem.NOSPAMox.aREMOVEc.uk> wrote: > How can I make my own functions give an error if they are called with > the wrong syntax? This is a FAQ -- but not so easy to find (a search on argx is a good way to find the answer). > For example, if I define this function > > In[37]:= > MyFunc1[x_,y_]:=Tuples[{x,y},2] > > and then Map MyFunc2 over the result > > In[38]:= > Map[MyFunc2,MyFunc1[a,b]] > > I get this (correct, desired) output. > > Out[38]= > {MyFunc2[{a,a}],MyFunc2[{a,b}],MyFunc2[{b,a}],MyFunc2[{b,b}]} > > However, if I inadvertently added a third argument > > In[39]:= > Map[MyFunc2,MyFunc1[a,b,c]] > > then I get this (correct, but undesired) output > > Out[39]= > MyFunc1[MyFunc2[a],MyFunc2[b],MyFunc2[c]] > > I would prefer to get some sort of error message in the second case, > such as the built-in function Sin[...] produces when called with the > wrong number of arguments. > > In[41]:= > Sin[1.] > Out[41]= > 0.841471 > In[42]:= > Sin[2,3] > From In[42]:= > Sin::argx : Sin called with 2 arguments; 1 argument is expected. Out[42]= > Sin[2,3] The following rule issues an error message (using the built-in Message mechanism via "argrx" -- look this up in the Help Browser) if f is called with an incorrect number (e.g. != 2) of arguments: f[args___]:= Null/; Length[{args}] != 2 && Message[f::"argrx", f, Length[{args}], 2] As a side-effect of evaluating the Condition the rule on the right-hand side computes the number of arguments using Length and prints a message when it is not equal to two. f[1,2,3] f::"argrx": f called with 3 arguments; 2 arguments are expected. More... f[1, 2, 3] Cheers, Paul _______________________________________________________________________ Paul Abbott Phone: 61 8 6488 2734 School of Physics, M013 Fax: +61 8 6488 1014 The University of Western Australia (CRICOS Provider No 00126G) AUSTRALIA http://physics.uwa.edu.au/~paul