Re: Extracting variables nested in functions

*To*: mathgroup at yoda.physics.unc.edu*Subject*: Re: Extracting variables nested in functions*From*: PERKINS TYLER R <perkins at spot.colorado.edu>*Date*: Tue, 15 Oct 91 17:46:35 -0600

> Does anyone know a method for extracting the variables from an expression > which has some of its variables buried in functions, such as x in Cos[x/Pi], > or b[1] and x[1] in Log[b[1], x[1]]? The built-in Variables seems to look for > subexpressions in terms of which the expression is a _polynomial_, so it > includes parts like Cos[x/Pi] in the list of "variables" it returns. > > Robby Villegas > Knox College Try the following: In[1]:= Globs[ expr_ ] := Cases[ Level[ expr, {-1} ], (* "Leaves" of expr. Excludes heads. *) _Symbol ? (Context[#] == "Global`" &) (* Match Global`s only *) ] In[2]:= Globs[ 2 Cos[x/Pi] y^2 z ] Out[2]= {y, z, x} But note that this WILL list Global` variables which happen to have rules associated with them, as long as they don't appear as the head of a subexpression of expr. For instance, In[3]:= Globs[ x y[Globs] ] Out[3]= {x, Globs} Notice that y is NOT listed, which might indeed be a variable of interest, and Globs IS listed, which is probably not of interest, because it has rules associated with it. I think the following would fix this, but only in 2.0: (I don't have 2.0 yet, so I can't test it.) Globs[ expr_ ] := Cases[ Level[ expr, {-1}, Heads->True ], _Symbol ? ( (* Mma. 2.0 only! *) DownValues[#] == {} && UpValues[#] == {} & ) ] Tyler Perkins perkins at spot.colorado.edu