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