Re: nesting pure functions
- To: mathgroup at smc.vnet.net
- Subject: [mg85992] Re: nesting pure functions
- From: "D. Grady" <D.C.Grady at gmail.com>
- Date: Sat, 1 Mar 2008 04:37:44 -0500 (EST)
- References: <47C7144C.4040305@berkeley.edu> <fq8r58$jeh$1@smc.vnet.net>
On Feb 29, 5:43=A0am, Ryan Olf <r... at efrus.com> wrote: > I have figured out how to do this in one manner. What I want is this: > > g = Function[{x,y,f},f[x,y,#]&] > > Now, the question remains: is there a way to do this without naming > variables explicitly? I would not be surprised if the answer is no. > > Ryan > > Ryan Olf wrote: > > I'm trying to define a function, g, such that given some parameters and > > a function as arguments, it returns a pure function: > > > g[x_,y_,f_Function] = Function[f[x,y,#]] > > > However, I need to define g itself as a pure function. I'm not sure how > > to do this. It may be something like this: > > > g = Function[Function[#3[#1,#2,#?????]]] > > > Obviously, I want #?????? to be the argument of the of the outermost > > Function, and #1, #2, #3 of the innermost function. > > > Is there a way of defining g as a pure function (of a pure function) in > > Mathematica? > > > I appreciate your help, > > Ryan If you're asking, is there a way to write this using the #& notation, I think the answer is no. You'd like to write something similar to this (#3[#1, #2, #] &) & or Function[Function[#3[#1, #2, #]]] but these are both incorrect; you intend for #1,#2,#3 to refer to the parameters of the outer Function, but they do not. As you pointed out, you can write Function[{x, y, f}, Function[f[x, y, #]]] to get what you want. This seems like the best solution; although some of the variables are named, Function localizes variable names, so you won't have to worry about name conflicts. An alternative might be to redefine the functions f that you're interested in using. Right now you call them with a sequence of three arguments: f[x,y,z]. If you called them like this instead: f[x,y][z], then you could write #3[#1, #2] & which would be called like (#3[#1, #2] & [x, y, f]) [z] Hopefully that helps at least a little bit; good luck with your project! -Daniel