MathGroup Archive 2007

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

Search the Archive

Get list of function variables?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg83312] Get list of function variables?
  • From: Thomas E Burton <tburton at brahea.com>
  • Date: Sat, 17 Nov 2007 05:23:36 -0500 (EST)

Mathematica offers many ways to assign values to symbols, but if we  
restrict attention to DownValues (look it up), then solutions are  
indeed simple. First let's add a two more examples illustrating very  
common definitions

f[w_Real, x_Integer, y_String, z_List] := "whatever"
   (* overload f with a second set of arguments *)

g[3, 4] := "bingo!"
   (* add a definition specific to particular values of arguments *)

Then one solution is

getVariables[f_] :=  Map[ReleaseHold, Apply[List, DownValues[f][[All,  
1]], {2}]]

Parsing this from inside out, it says
(1) Grab the list of left members of DownValues of f.
(2) Reach inside the HoldPattern and replace f[args] with List[args].
(3) Release HoldPattern.

Note that arguments are generally patterns ("x_", "w_Real", etc.) but  
can be specific symbols ("3","4"), and that this version of  
getVariables retains this distinction. If you don't care to see this,  
you can easily strip these off:

getVariables2[f_] := getVariables[f] /. p_Pattern :> First[p]

> This seems simple but how do I get the arguments to an arbitrary  
> function? Ideally something like getVariables[f] that just accepts  
> the function name as its argument.
>
> If I have f[x_,y_]:=a*x^2+b*y^2,  getVariables[f] should return  
> {x,y} If I have g[n_,m_]:=a*n^2+b*m^2, getVariables[g] should  
> return {n,m} If I have h[w_,x_,y_,z_]:=A*w*x*y*z+B, getVariables[h]  
> should return
> {w,x,y,z}




  • Prev by Date: Re: Basic Locator question in a Manipulate...
  • Next by Date: Re: Does ColorFunction-> have different meanings to Plot3D and
  • Previous by thread: Re: Get list of function variables?
  • Next by thread: Re: Get list of function variables?