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>