Re: Determine if a parameter is a function

• To: mathgroup at smc.vnet.net
• Subject: [mg101834] Re: Determine if a parameter is a function
• From: ADL <alberto.dilullo at tiscali.it>
• Date: Sat, 18 Jul 2009 08:00:47 -0400 (EDT)
• References: <h3kddu\$g35\$1@smc.vnet.net>

```Another possibility is to define a "question" function like this:

ClearAll[FunctionQ];
FunctionQ[f_] :=
(AtomQ[f] && Head[f] === Symbol && !NumericQ[f] && (
DownValues[f] =!= {} || Attributes[f] =!= {}
))

Then you can use the above function as an argument check like below:

ClearAll[myfunc];
myfunc::nfun = "argument `1` should be a function.";
myfunc[f_?FunctionQ, x_] = f[x];
myfunc[__] := Message[myfunc::nfun, f];

and the examples provided in the discussion work.

An borderline case might be:
myfunc[C, x]
C[x]
because C is a standard name for constants and has a particular
definition.

Note that the check for NumericQ is necessary to avoid slipping in
constants like I or E.

On Jul 15, 1:09 pm, Peter Breitfeld <ph... at t-online.de> wrote:
> Suppose I have a function eg
>
> myfunc[f_,x_]:= <some definitions>
>
> f should be a pure function like (#^2&) or Function[{x},x^2] or a named
> function either self defined, like
>
> f[x_]:=x^2   or g[x_]=x^2
>
> or built-in like Sin, Log, ...
>
> How can I test if f is any of these, to be able to yield a message on
> wrong input?
>
> I found that the pure-functions have Head Function, but all the others