       Re: What is a good way of returning a function from a Module[]?

• To: mathgroup at smc.vnet.net
• Subject: [mg83392] Re: What is a good way of returning a function from a Module[]?
• From: Norbert Marxer <marxer at mec.li>
• Date: Mon, 19 Nov 2007 06:15:32 -0500 (EST)
• References: <fhmesn\$8pg\$1@smc.vnet.net> <fhp36k\$276\$1@smc.vnet.net>

```On 18 Nov., 11:12, Peter Pein <pet... at dordos.net> wrote:
> Szabolcs Horv=E1t schrieb:
>
>
>
>
>
> > What is an elegant way of returning a function from a Module[]?
>
> > Module[{a, b}, a = 1; b = a+1; (a+b+#)&] does not work because
> > Function[] holds its arguments.
>
> > The best way I could find was
>
> > Module[{p, q}, p = 1; q = p+1; With[{a = p, b = q}, (a+b+#)&]]
>
> > Is there a nicer/more concise way of doing this?  This is a simplified
> > example, but the important points are:
>
> > 1. The returned function may depend on more than one parameter ('a' and
> > 'b'; let's forget that in this case their sum could have been computed
> > inside the Module[]).
>
> > 2. 'a' and 'b' are not calculated independently.  The value of 'a' is
> > needed to find 'b'
>
> > Szabolcs
>
> In Version 5.2:
>
> map Evaluate onto the function:
>
> Module[{a, b}, a = 1; b = a + 1;
>    Evaluate /@ (a + b + #1 & )]
>
> 3 + #1 &
>
> This works even for functions with arguments which got names already
> used in the module:
>
> Module[{a, b, x = Pi, y = E},
>   a = 1; b = a + 1; Evaluate /@
>     Function[{x, y}, (a + b + x)/
>       (y - b + a)]]
>
> Function[{x\$, y\$}, (3 + x\$)/(-1 + y\$)]
>
> Peter- Zitierten Text ausblenden -
>
> - Zitierten Text anzeigen -

Hello

You do not even need Map. You can just wrap your Function body into an
Evaluate:

Module[{a, b}, a = 1; b = a + 1; Evaluate[a + b + #1] & ]

Best Regards
Norbert Marxer

```

• Prev by Date: SeriesCoefficient: needs work!
• Next by Date: Re: classes.m
• Previous by thread: Re: What is a good way of returning a function from a Module[]?
• Next by thread: Given a matrix A, construct a semi-orthogonal matrix L