Boost logo

Boost :

Subject: Re: [boost] painless currying
From: Jinqiang Zhang (jasonzha_at_[hidden])
Date: 2011-08-23 20:37:52


similar as Mathias's thought, I would see the following approach more
appropriate:

boost::accumulative_function< r(a1, a2, ...)>

because essentially, the currying is to call same thing repeatedly and
remember the result each time.

cheers,
Jinqiang ZHANG
On Wed, Aug 24, 2011 at 7:21 AM, Mathias Gaunard <
mathias.gaunard_at_[hidden]> wrote:

> On 08/23/2011 11:15 PM, Mathias Gaunard wrote:
>
>> On 08/23/2011 09:38 PM, Eric Niebler wrote:
>>
>>> After playing around with functional languages, I've come to envy how
>>> easy they make it to curry functions. Call a 2-argument function with 1
>>> argument and you get a function that takes 1 argument. Pass another
>>> argument and it evaluates the function. Simple. In contrast, C++ users
>>> have to use binders, which are not as nice.
>>>
>>> On a lark, I implemented a wrapper that turns any TR1-style function
>>> object into a "curryable" function object (attached). Successive
>>> function call invocations bind arguments until enough arguments are
>>> bound to invoke the wrapped function. With it you can do the following:
>>>
>>> curryable<std::plus<int> > p;
>>> auto curried = p(1);
>>> int i = curried(2);
>>> assert(i == 3);
>>>
>>> Is there any interest in such a thing?
>>>
>>
>> It could be argued that Phoenix actors should be doing this.
>>
>> I also asked a lot of time ago for an easy function to turn a pfo into a
>> phoenix actor, which I think would make phoenix much more ubiquitous.
>>
>> assuming that function was called lazy, and Phoenix did currying
>> automatically, you could do
>>
>> int i = (lazy(std::plus<int>)(1) + 4)(3)
>>
>
> Sorry, this should have been
>
> int i = (lazy(std::plus<int>())(1) + 4)(3)
> of course.
>
> And I remember why Phoenix doesn't do currying: that's because that only
> works with monomorphic function objects.
>
> Detecting and propagating monomorphism could be nice though. It could
> eventually provide better error messages, faster compilation times, and
> automatic currying on monomorphic function objects.
>
>
>
> ______________________________**_________________
> Unsubscribe & other changes: http://lists.boost.org/**
> mailman/listinfo.cgi/boost<http://lists.boost.org/mailman/listinfo.cgi/boost>
>


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk