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_] :=
(Head[f] === Function) ||
(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.
ADL
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
> have Head Symbol, so asking for the head is not sufficient.
>
> --
> _________________________________________________________________
> Peter Breitfeld, Bad Saulgau, Germany --http://www.pBreitfeld.de