MathGroup Archive 2007

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

Search the Archive

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

  • To: mathgroup at smc.vnet.net
  • Subject: [mg83378] Re: What is a good way of returning a function from a Module[]?
  • From: Peter Pein <petsie at dordos.net>
  • Date: Sun, 18 Nov 2007 04:59:01 -0500 (EST)
  • References: <fhmesn$8pg$1@smc.vnet.net>

Szabolcs Horvát 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


  • Prev by Date: Plot to Plot3D problem
  • Next by Date: Symbolic vector handling
  • Previous by thread: What is a good way of returning a function from a Module[]?
  • Next by thread: Re: What is a good way of returning a function from a Module[]?