Re: strange function that defines a function---how do I do it?
- To: mathgroup at smc.vnet.net
- Subject: [mg15229] Re: strange function that defines a function---how do I do it?
- From: dreissBLOOP at bloop.earthlink.net (David Reiss)
- Date: Wed, 23 Dec 1998 01:04:06 -0500
- Sender: owner-wri-mathgroup at wolfram.com
Here is one way to do it (I allow you to give the head of the function that you define as the first argument): In[1]:= Clear[FunMake1]; FunMake1[f_,x_List,expr_]:= ( Clear[f]; f[Sequence@@(Pattern[#,_]&)/@x]:=expr ) In[2]:= FunMake1[h, {x,y,z},x^2 + y/z] In[3]:= ?h "Global`h" h[x_, y_, z_] := x^2 + y/z In[4]:= h[a,b,c] Out[4]= \!\(a\^2 + b\/c\) Also, if you wan to add a NumberQ condition you can write: In[5]:= Clear[FunMake2]; FunMake2[f_,x_List,expr_]:= ( Clear[f]; f[Sequence@@(Pattern[#,_?NumberQ]&)/@x]:=expr ) In[6]:= FunMake2[g, {x,y,z,t},x^2 + y/z+Sin[t]] In[7]:= ?g "Global`g" g[x:_?NumberQ, y:_?NumberQ, z:_?NumberQ, t:_?NumberQ] := x^2 + y/z + Sin[t] In[8]:= g[a,1,2,3] Out[8]= g[a,1,2,3] In[9]:= g[3,4,5,6] Out[9]= \!\(49\/5 + Sin[6]\) Regards, David In article <75no5e$sgj at smc.vnet.net>, belotto at vassar.edu (Benjamin Lotto) wrote: > Working with Mathematica 3.0: > > Suppose I define > > makefunction[var_, expr_]:=f[var_?NumberQ]:=NIntegrate[expr,{x,0,1}] > > Then I can do something like > > z=x^2 > makefunction[x,z] > > and it will be just as if I typed > > f[x_?NumberQ]:=NIntegrate[x^2,{x,0,1}] > > In fact, entering > > ?f > > at this point yields > > "Global`f" > > f[(x_)?NumberQ] := NIntegrate[x^2, {x, 0, 1}] > > OK, now suppose I have a list of variables x1 up through xn. Suppose > they're in a list: > > list={x1,x2,...,xn} > > I want something like "makefunction" above so that when I type > > makefunction[list,expr] > > it will be just as if I typed > > f[x1_?NumberQ,x2_?NumberQ,...,xn_?NumberQ]:=expr > > analogous to the above. Can anyone help me? > > Thanks in advance. Y'all out there have been very helpful in the past. -- David Reiss dreissBLOOP at bloop.earthlink.net To send personal email, remove the words "bloop" and "BLOOP" from the email address