Details
-
New Feature
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
Description
Hi.
Groovy's Closure have a name of method 'curry'.
But this is not work for a real currying, it work as a partial function application.
So, I wrote method of 'Real currying'.
Referenced http://en.wikipedia.org/wiki/Currying
Closure add = {a, b, c -> a + b + c } // Closure of adding 3 arguments. assert add(1, 2, 3) == realCurry(add)(1)(2)(3) assert 6 == add(1, 2, 3) def curriedAdd = realCurry(add) def curriedAdd_1 = curriedAdd(1) def curriedAdd_1_2 = curriedAdd_1(2) def addResult = curriedAdd_1_2(3) assert 6 == addResult def realCurry(Closure clos) { if (clos.maximumNumberOfParameters >= 1) { return { x -> def cc = clos.curry(x) if (cc.maximumNumberOfParameters) realCurry(cc) else cc() } } else { return clos } }
(It's also published on gist https://gist.github.com/1193548)
I hope this will be adopted to Groovy core.
Thank you.
Attachments
Issue Links
- is duplicated by
-
GROOVY-6281 Add Support for curried functions - make Groovy more functional
- Closed