Details

    • Type: New Feature New Feature
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: 3.0
    • Component/s: groovy-jdk
    • Labels:
      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.

        Issue Links

          Activity

          No work has yet been logged on this issue.

            People

            • Assignee:
              Unassigned
              Reporter:
              Kentaro Yoshida
            • Votes:
              0 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

              • Created:
                Updated:

                Development