       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:= getFunc:=With[{a=2},Function[{x},a*x]]

In:= f=getFunc

Out= 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:=
Clear[getFunc];
getFunc[y_] := Function[{x}, y*x]

In:= getFunc

Out= 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:= getFunc := Module[{a=2}, Function[{x}, a * x]]
>
> In:= f = getFunc
>
> Out= 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