Re: Conditional evaluations of functions

*To*: mathgroup at smc.vnet.net*Subject*: [mg96549] Re: Conditional evaluations of functions*From*: Asim <maa48 at columbia.edu>*Date*: Mon, 16 Feb 2009 06:56:58 -0500 (EST)*References*: <gn5udh$gsv$1@smc.vnet.net> <gn8ja8$7ng$1@smc.vnet.net>

On Feb 15, 3:21 am, Jean-Marc Gulliet <jeanmarc.gull... at gmail.com> wrote: > In article <gn5udh$gs... at smc.vnet.net>, Asim <ma... at columbia.edu> > wrote: > > > I am not sure why the function g does not work, but the function f > > works as expected on Mathematica 7.0 on Windows XP. I want to get th= e > > sum of a vector only if the argument supplied is a numeric vector. > > > In[1]:= g[x_?VectorQ[ x, NumericQ]] := Total[x] > > > In[2]:= g[{a, b , c}] > > > Out[2]= g[{a, b, c}] > > > In[3]:= g[{1, 2, 3}] > > > Out[3]= g[{1, 2, 3}] > > [snip] > > The test function that follows the question mark operator '?' is > expected to be a pure function. A *pattern*, like the one used for the > function f after the condition operator '/;' (which expect a pattern) is > *not* a pure function. Try > > In[1]:= > > g[(x_)?(VectorQ[#1, NumericQ] & )] := Total[x] > g[{a, b, c}] > g[{1, 2, 3}] > > Out[2]= g[{a, b, c}] > > Out[3]= 6 > > Regards, > --Jean-Marc Thanks to all for your answers. Things were not clear from the document that one needs a Pure Function. Asim