Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

..and you said java dont curry

Name: Anonymous 2007-06-03 15:49 ID:xvzgDsaZ

   public class Currier<ARG1, ARG2, RET> {
       public interface CurriableFunctor<ARG1, ARG2, RET> {
           RET evaluate(ARG1 arg1, ARG2 arg2);
       }
  
       public interface CurriedFunctor<ARG2, RET> {
           RET evaluate(ARG2 arg);
       }
  
       final CurriableFunctor<ARG1, ARG2, RET> functor;
  
       public Currier(CurriableFunctor<ARG1, ARG2, RET> fn) { functor = fn; }
      
       public CurriedFunctor<ARG2, RET> curry(final ARG1 arg1) {
           return new CurriedFunctor<ARG2, RET>() {
               public RET evaluate(ARG2 arg2) {
                   return functor.evaluate(arg1, arg2);
               }
           };
       }
  
       public static void main(String[] args) {
           Currier.CurriableFunctor<Integer, Integer, Integer> add
               = new Currier.CurriableFunctor<Integer, Integer, Integer>() {
                   public Integer evaluate(Integer arg1, Integer arg2) {
                       return new Integer(arg1.intValue() + arg2.intValue());
                   }
           };
          
           Currier<Integer, Integer, Integer> currier
               = new Currier<Integer, Integer, Integer>(add);
          
           Currier.CurriedFunctor<Integer, Integer> add5
               = currier.curry(new Integer(5));
          
           System.out.println(add5.evaluate(new Integer(2)));
       }
   }

Name: Anonymous 2009-01-30 0:35

...and you said C# dont curry


using System;

namespace Currying
{
    class Curried<T1, TResult>
    {
        Func<T1, TResult> func;

        public Curried(Func<T1, TResult> f)
        {
            func = f;
        }

        public TResult Run(T1 t1)
        {
            return func(t1);
        }
    }

    class Curried<T1, T2, TResult>
    {
        Func<T1, T2, TResult> func;

        public Curried(Func<T1, T2, TResult> f)
        {
            func = f;
        }

        public Curried<T2, TResult> Run(T1 t1)
        {
            return new Curried<T2, TResult>(t2 => func(t1, t2));
        }

        public TResult Run(T1 t1, T2 t2)
        {
            return func(t1, t2);
        }
    }

    class Curried<T1, T2, T3, TResult>
    {
        Func<T1, T2, T3, TResult> func;

        public Curried(Func<T1, T2, T3, TResult> f)
        {
            func = f;
        }

        public Curried<T2, T3, TResult> Run(T1 t1)
        {
            return new Curried<T2, T3, TResult>((t2, t3) => func(t1, t2, t3));
        }

        public Curried<T3, TResult> Run(T1 t1, T2 t2)
        {
            return new Curried<T3, TResult>(t3 => func(t1, t2, t3));
        }

        public TResult Run(T1 t1, T2 t2, T3 t3)
        {
            return func(t1, t2, t3);
        }
    }

    class Program
    {
        static int Add(int a, int b)
        {
            return a + b;
        }

        static int Add3(int a, int b, int c)
        {
            return a + b + c;
        }

        static void Main(string[] args)
        {
            var cAdd = new Curried<int, int, int>(Add);
            var cAdd3 = new Curried<int, int, int, int>(Add3);
            var added = cAdd.Run(5).Run(4);
            var added3 = cAdd3.Run(1).Run(2).Run(3);
            Console.WriteLine(added);
            Console.WriteLine(added3);
        }
    }
}


...and you can continue writing more Curried<> classes like so.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List