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