Re: pure function
- To: mathgroup at smc.vnet.net
- Subject: [mg113711] Re: pure function
- From: Leonid Shifrin <lshifr at gmail.com>
- Date: Mon, 8 Nov 2010 05:39:42 -0500 (EST)
Stephan, Yes, sure, use With instead of Module: In[2]:= getFunc:=With[{a=2},Function[{x},a*x]] In[3]:= f=getFunc Out[3]= Function[{x$},2 x$] So, by using Module, you can create a closure whose state (variable <a> in this case) comes from surrounding context but can be modified by it at a later time. Using With gets you a textual substitution of a value that a given expression had, at the moment when With was invoked. You can also accomplish your goal somewhat differently, by redefining your getFunc: In[4]:= Clear[getFunc]; getFunc[y_] := Function[{x}, y*x] In[6]:= getFunc[2] Out[6]= Function[{x$}, 2 x$] The semantics of parameter-passing in Mathematica is somewhat similar to With: parameters are textually substituted to the body before the body starts to evaluate. There are a few subtle differences (related to name collision resolution in nested scoping constructs), but they do not show up in this particular case. Regards, Leonid On Mon, Nov 8, 2010 at 11:37 AM, Stephan <stschiff80 at googlemail.com> wrote: > Hi, > > I have a function that returns a pure function: > > In[1]:= getFunc := Module[{a=2}, Function[{x}, a * x]] > > In[2]:= f = getFunc > > Out[2]= Function[{x$}, a$57 x$] > > > Is there any way, to have the body of the returned function contain the > actual _value_ of the local variable a, instead of the _symbol_ ? > > So I would like the returned function to be written as > > Function[{x$}, 2 x$] > > The reason is, that I would like to have a quick way to actually see the > value instead of digging out the local variable a$57... > > Thanks, > > Stephan > >