MathGroup Archive 2007

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

Search the Archive

Get list of function variables?

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?