MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: pure function


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[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
parameters are textually substituted to the body before the body starts to
There are a few subtle differences (related to name collision resolution in
scoping constructs), but they do not show up in this particular case.


On Mon, Nov 8, 2010 at 11:37 AM, Stephan <stschiff80 at> 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

  • Prev by Date: Re: help: how to fit a list of data in two dimensions
  • Next by Date: Re: pure function
  • Previous by thread: Re: pure function
  • Next by thread: Re: pure function