[Date Index]
[Thread Index]
[Author Index]
Re: defining a function whose parameter must be a function with two
*To*: mathgroup at smc.vnet.net
*Subject*: [mg131001] Re: defining a function whose parameter must be a function with two
*From*: David Bailey <dave at removedbailey.co.uk>
*Date*: Sun, 2 Jun 2013 00:30:14 -0400 (EDT)
*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com
*Delivered-to*: l-mathgroup@wolfram.com
*Delivered-to*: mathgroup-outx@smc.vnet.net
*Delivered-to*: mathgroup-newsendx@smc.vnet.net
*References*: <koch6b$t5t$1@smc.vnet.net>
On 01/06/2013 11:08, Roman wrote:
> Dear all,
> I am trying to define a function F which will only execute if its parameter is a function with two parameters. Let's say I define it thus, without any checks on the parameter pattern f:
>
> In[1] := F[f_] := f[2,3]
>
> There are several ways of calling F:
> 1) pass it a function of two parameters:
> In[2] := F[Function[{a,b},a^2-b^2]]
> Out[2] = -5
>
> 2) pass it an anonymous function of two parameters:
> In[3] := F[#1^2-#2^2 &]
> Out[3] = -5
>
> 3) pass it a pre-defined function:
> In[4] := g[a_,b_] = a^2-b^2;
> In[5] := F[g]
> Out[5] = -5
>
> My question is: how can I define a pattern in the definition of F[f_] such that this function F will execute these three cases while not executing if called with any other kind of parameter? The following calls should fail, for example:
>
> In[6] := F[Function[{a,b,c},a^2-b^2-3c]]
> Out[6] = F[Function[{a,b,c},a^2-b^2-3c]]
>
> In[7] := F[#1^2-#2^2-3#3 &]
> Out[7] = F[#1^2-#2^2-3#3 &]
>
> In[8] := h[a_,b_,c_] = a^2-b^2-3c;
> In[9] := F[h]
> Out[9] = F[h]
>
> Further, for bonus points, if there are multiple definitions of a function, I'd like to pick the one with two parameters:
> In[10] := k[a_,b_] = a^2-b^2;
> In[11] := k[a_,b_,c_] = a^2-b^2-3c;
> In[12] := F[k]
> Out[12] = -5
>
> Thanks for any help!
> Roman
>
I don't think you can possibly achieve this with a simple pattern, but
don't forget you can use an arbitrary predicate to control a pattern match:
F[x_?suitableFunctionQ]:= .........
Now you can test all sorts of possibilities inside your function
suitableFunctionQ :
If x is an atom, you can retrieve its definitions with DownValues etc.
Then you can look for the Function head. This will cover the shorthand
pure function notation as well because:
In[6]:= #1^2 - #2^2 - 3 #3 & // Head
Out[6]= Function
Etc.
The only problem might be performance!
David Bailey
http://www.dbaileyconsultancy.co.uk
Prev by Date:
**Re: Work on Basic Mathematica Stephen!**
Next by Date:
**Re: Problems with solving integrals in Mathematica 9**
Previous by thread:
**Re: Work on Basic Mathematica Stephen!**
Next by thread:
**Re: defining a function whose parameter must be a function with two**
| |