MathGroup Archive 2002

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

Search the Archive

Re: Re: Function as an argument of the function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg34710] Re: [mg34642] Re: [mg34638] Function as an argument of the function
  • From: Andrzej Kozlowski <andrzej at platon.c.u-tokyo.ac.jp>
  • Date: Sun, 2 Jun 2002 01:14:46 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

After sending this message I received a reply from Tomek in which he 
explained exactly what he meant. Basically he wanted a predicate 
function  which tests whether an expression contains just one variable 
and takes numerical values when a number (or a numeric) quantity is 
substituted for this variable. This is what he meant by a function of 
one variable. In particualr {x} is not a function in his sense.  As a 
result of our discussion  I come up with the following solution:

FunctionQ[expr_] :=
  With[{values = Union[Cases[expr, _Symbol?( ! NumericQ[#1] & ),
        {0, -1}]]},
   And[Length[values] == 1 ,
       Sequence @@
         NumberQ /@ ({Denominator[expr ], Numerator[expr ]} /.
               values[[1]] -> Random[])]]

The idea is that we first test if the expression has just one variable 
and then we substitute a random number between 0 and 1 and test if the 
denominator and numerator of the expression are numbers.

This seems to work for most reasonable functions in Tomek's sense:

In[19]:=
FunctionQ[Sin[Sin[x]]]

Out[19]=
True

In[20]:=
FunctionQ[Sin[x]+y]

Out[20]=
False

and even:

In[21]:=
FunctionQ[1/UnitStep[x - 1]]

Out[21]=
True

Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/



On Friday, May 31, 2002, at 05:26  PM, Andrzej Kozlowski wrote:

> Strictly speaking your request does not make sense, since in Mathematica
> almost everything is a "function" in some sense or other. For example if
> f is a symbol you can always "apply" it to 2 to get f[2], and so on.
>
> However, I assume what yu mean is something in a very much narrower
> sense, meaning either a built-in numeric function like Sin, or a user
> defined function of the form f[x_]:= .... Well, something like this will
> do the trick, (with various obvious limitations):
>
> FunctionQ[f_] :=
>    Block[{x}, DownValues[f] != {} || MemberQ[Attributes[f],
> NumericFunction]]
>
> Now let's define a function:
>
> f[x_] := x^2
>
> and something that needs an argument to be a function:
>
> g[f_?FunctionQ, a_] := f[a]
>
> We get:
>
> In[4]:=
> g[Sqrt,4]
>
> Out[4]=
> 2
>
> In[5]:=
> g[Sin,x]
>
> Out[5]=
> Sin[x]
>
> In[6]:=
> g[f,x]
>
> Out[6]=
> x^2
>
> In[7]:=
> g[p,x]
>
> Out[7]=
> g[p, x]
>

>
>
> On Thursday, May 30, 2002, at 03:55  PM, Tomek wrote:
>
>> Hi.
>> I have to write a short function in Mathematica. But I have one
>> problem with  it. One of arguments of my function have to be a
>> function of one variable.
>> How can I check if the argument of the function is a function of one
>> variable (I wish there's FunctionQ)?
>>
>>
>>
>>
>
>
>
>



  • Prev by Date: Re: Is it possible to access internal variables?
  • Next by Date: Generic Mathematica NonlinearRegress Question
  • Previous by thread: RE: Re: Function as an argument of the function
  • Next by thread: Re: Function as an argument of the function