MathGroup Archive 2010

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

Search the Archive

Re: pure function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg113745] Re: pure function
  • From: Stephan <stschiff80 at googlemail.com>
  • Date: Wed, 10 Nov 2010 06:28:36 -0500 (EST)

Cool,

thanks for the hint about using "With", everyone.

Best,

Stephan

Am 09.11.2010 um 08:52 schrieb Ray Koopman:

> On Nov 8, 2:40 am, Stephan <stschif... at googlemail.com> wrote:
>> Ah, I forgot a follow up:
>>
>> What if I don't want to use a constant like in the example I stated?
>> What if I want to compute the local value of a in the module and
>> return the computed value instead of the symbol? I am kind of
>> looking for a general way to evaluate a part of an expression
>> within the delayed evaluation of the function body.
>>
>> Thanks,
>>
>> Stephan
>
> In[1]:== getFunk :== Module[{a==2}, With[{b==a^2}, Function[{x}, b * x]]]
>
> In[2]:== g == getFunk
>
> Out[2]== Function[{x$},4 x$]
>
>>
>> Am 08.11.2010 um 09:20 schrieb Leonid Shifrin:
>>
>>> 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 y=
our 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 t=
o With:
>>> parameters are textually substituted to the body before the body starts=
 to evaluate.
>>> There are a few subtle differences (related to name collision resolutio=
n 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 <stschif... at googlemail.com> wr=
ote:
>>>> 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 th=
e
>>>> 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 t=
he
>>>> value instead of digging out the local variable a$57...
>>>>
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Stephan
>


  • Prev by Date: Re: can't get Mathematica 5.2 to evaluate anything
  • Next by Date: Re: FindMinimum and Module
  • Previous by thread: Re: pure function
  • Next by thread: x and y labels in ArrayPlot