Re: defining a function whose parameter must be a function
- To: mathgroup at smc.vnet.net
- Subject: [mg131003] Re: defining a function whose parameter must be a function
- From: Bob Hanlon <hanlonr357 at gmail.com>
- Date: Sun, 2 Jun 2013 00:30:54 -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: <20130601102829.0E29D6A2D@smc.vnet.net>
f1[x_] = x; f1[x_, y_] = x^2 - y^2; f1[x_, y_, z_] = x^2 - y^2 - 3 z; f2 = #1^2 - #2^2 &; f3 = Function[{x, y}, x^2 - y^2]; f4 = #1 &; f5 = Function[{x}, x]; f6[a_, b_, c_] = a^2 - b^2 - 3 c; F[f_] := f[2, 3] /; FreeQ[f[Unique[], Unique[]], f] && Length[Union[ Cases[f[Unique[], Unique[]], _Symbol?(! NumericQ[#] &), Infinity]]] == 2 F /@ {f1, f2, f3, f4, f5, f6} {-5, -5, -5, F[#1 &], F[Function[{x}, x]], F[f6]} Bob Hanlon On Sat, Jun 1, 2013 at 6:28 AM, Roman <rschmied at gmail.com> 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 > >
- References:
- defining a function whose parameter must be a function with two parameters
- From: Roman <rschmied@gmail.com>
- defining a function whose parameter must be a function with two parameters