MathGroup Archive 2013

[Date Index] [Thread Index] [Author Index]

Search the Archive

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
>
>


  • Prev by Date: Re: Problems with solving integrals in Mathematica 9
  • Next by Date: Re: Applying Mathematica to practical problems
  • Previous by thread: defining a function whose parameter must be a function with two parameters
  • Next by thread: Re: defining a function whose parameter must be a function