Functions inside modules with external definitions
- To: mathgroup at smc.vnet.net
- Subject: [mg96494] Functions inside modules with external definitions
- From: "E. Martin-Serrano" <eMartinSerrano at telefonica.net>
- Date: Sat, 14 Feb 2009 03:14:13 -0500 (EST)
Hi,
Please review the following and see weather my question has and deserves an
answer. It is a about defining functions local to modules but using external
definitions of the right hand side of the local function and passed as
parameters to the module.
expression = a x ^c + b y ^(1-c) (* or whatever expression *)
Clear[f];
f[x_: x,y_: y][a_: a,b_: b,c_: c]:=Evaluate@expression
?f
f[k1,k2][.2,.3,.4]
(* Functions inside modules where the RHS of the function has been assigned
to a variable *)
(* first form works as I expected, but uses an extrenal definition for a
local function (the name is local) *)
m1=
Module[{f},
f[x_: x,y_: y][a_ :a,b_: b,c_: c]:=Evaluate@expression;
f[k1,k2][.2,.3,.4]
]
(* second form. I expected it worked as the one above but it does not; the
expression formed outside is assigned to a local variable with the same name
*)
m2 =
Module[{f, expression = expression},
f[x_: x, y_: y][a_ :a,b_: b,c_: c]:=Evaluate@expression;
f[k1,k2][.2,.3,.4]
]
(* third form. I expected it worked as the first one above but it does not;
the expression is assigned directly to a local variable *)
m3 =
Module[{f,expression = a x ^c + b y ^(1-c)},
f[x_: x,y_: y][a_ :a,b_: b,c_: c]:=Evaluate@expression;
f[k1,k2][.2,.3,.4]
]
(* fourth form. I expected it worked as the first one above but it does not;
the expression is assigned within the body of the module o a local variable
*)
m4 =
Module[{f,expr},
expr =expression;
f[x_: x,y_: y][a_ :a,b_: b,c_: c]:=Evaluate@expr;
f[k1,k2][.2,.3,.4]
]
(* My question is how to construct a function inside a module in manner
similar to the following *)
expression = a x ^c + b y ^(1-c);
mx =
Module[{f,expression = expression},
f[x_: x,y_: y][a_ :a,b_: b,c_: c]:=Evaluate@expression;
f[k1,k2][.2,.3,.4]
]
(* and working as the following works *)
m1=
Module[{f},
f[x_: x,y_: y][a_ :a,b_: b,c_: c]:=Evaluate@expression;
f[k1,k2][.2,.3,.4]
]
Many thanks
E. martin-Serrano
- Follow-Ups:
- Re: Functions inside modules with external definitions
- From: Leonid Shifrin <lshifr@gmail.com>
- Re: Functions inside modules with external definitions