SORU
26 Mayıs 2011, PERŞEMBE


Java desteği Tımar mu?

Eğer mobil çekmek için herhangi bir yolu varsa merak ettim. Kapatma desteği olmadan mümkün olmadığını düşünüyorum.

CEVAP
26 Mayıs 2011, PERŞEMBE


Tımar ve kısmi uygulama Java kesinlikle mümkün, ama kod miktarı muhtemelen kapanacaktır.


Bazı kodlar Java tımar ve kısmi uygulama göstermek için:

interface Function1<A, B> {
  public B apply(final A a);
}

interface Function2<A, B, C> {
  public C apply(final A a, final B b);
}

class Main {
  public static Function2<Integer, Integer, Integer> simpleAdd = 
    new Function2<Integer, Integer, Integer>() {
      public Integer apply(final Integer a, final Integer b) {
        return a   b;
      }
    };  

  public static Function1<Integer, Function1<Integer, Integer>> curriedAdd = 
    new Function1<Integer, Function1<Integer, Integer>>() {
      public Function1<Integer, Integer> apply(final Integer a) {
        return new Function1<Integer, Integer>() {
          public Integer apply(final Integer b) {
            return a   b;
          }
        };
      }
    };

  public static void main(String[] args) {
    // Demonstrating simple `add`
    System.out.println(simpleAdd.apply(4, 5));

    // Demonstrating curried `add`
    System.out.println(curriedAdd.apply(4).apply(5));

    // Curried version lets you perform partial application 
    // as demonstrated below.
    Function1<Integer, Integer> adder5 = curriedAdd.apply(5);
    System.out.println(adder5.apply(4));
    System.out.println(adder5.apply(6));
  }
}

FWIW işte yukarıdaki Java kod Haskell eşdeğer:

simpleAdd :: (Int, Int) -> Int
simpleAdd (a, b) = a   b

curriedAdd :: Int -> Int -> Int
curriedAdd a b = a   b

main = do
  -- Demonstrating simpleAdd
  print $ simpleAdd (5, 4)

  -- Demonstrating curriedAdd
  print $ curriedAdd 5 4

  -- Demostrating partial application
  let adder5 = curriedAdd 5 in do
    print $ adder5 6
    print $ adder5 9

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ampisound

    Ampisound

    12 Kasım 2006
  • majesticdubstep

    majesticdubs

    3 Kasım 2011
  • PaysNatalAu's channel

    PaysNatalAu'

    11 Aralık 2010