Re: Q: extracting list of arguments of function
- To: mathgroup at smc.vnet.net
- Subject: [mg16501] Re: Q: extracting list of arguments of function
- From: dreiss at !SPAMscientificarts.com (David Reiss)
- Date: Tue, 16 Mar 1999 03:59:50 -0500
- Organization: EarthLink Network, Inc.
- References: <7cd7td$o8m@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <7cd7td$o8m at smc.vnet.net>, Jerzy Niesytto <woland99 at earthlink.net> wrote: > Let's assume that we want to pass function goo as argument > to another function foo and extract list of arguments > of the function goo: > foo[fun_] := Module[{argList}, argList = Table[fun[[i]],{i,1,2}] ] > foo[goo[x,y]]; > > This will result in list: > {x,y} > > But if goo was defined before eg: > goo[s_,t_] = s^2 + t^3; > > then we get: > {x^2,y^3} ..... > > Can anybody point me in a right direction here? > Sorry for such an elementary question... > > JT One way to do this is to give the function foo the attribute HoldAll In[1]:= ClearAll[foo]; Attributes[foo]={HoldAll}; foo[fun_[z___]]:={z} With this you expect the following: In[2]:= foo[s^2 + t^3] Out[2]= {s^2, t^3} And for an arbitrary function h you expect this: In[3]:= foo[h[a,b,x]] Out[3]= {a,b,x} Now if you define goo as In[4]:= goo[s_,t_] := s^2 + t^3 then the HoldAll attribute causes the argument of foo to be looked at in its unevaluated form: In[5]:= foo[goo[x,y]] Out[5]= {x,y} However if Evaluate is explicitly used then the following is the result In[6]:= foo[Evaluate[goo[x,y]]] Out[6]= {x^2, y^3} If you don't want this to happen then use the attribute HoldAllComplete instead of HoldAll Cheers, David -- ---------------------------------------- Scientific Arts: Creative Services and Consultation for the Applied and Pure Sciences http://www.scientificarts.com David Reiss Email: dreiss at !SPAMscientificarts.com ---------------------------------------- Remove the !SPAM to send email