ML vs Java

For at se om jeg kunne finde ud af at programmere i et funktionelt sprog, installerede jeg Standard ML New Jersy version 110. Efter at have kikket på det lidt, er jeg kommet frem til at det er mega genialt. Bare noget som matematisk fakultet, som kan løses rekursivt er smart.

Factorial i smlnj:
- fun fac 0 = 1 | fac n = n * fac(n - 1);

Kørsel og resultat af programmet:
- fac 10;
val it 3628800 : int

Factorial i java:

public class Fac {
    public static int fac(n) {
        if (n == 0) return 1;
        return n * fac(n - 1);
    }
    public static void main(String[] args) {
        System.out.println(fac(args[0]));
    }
}

Kørsel og resultat af programmet:
andreas$ javac Fac.java
andreas$ java Fac 10
andreas$ 3628800

SML både fylder mindre og er mere overskuelig. Den behøver heller ikke compile som Java, hvilke gør en så simpel programmerings opgave som denne alt for besværlig. Jeg glæder mig til at lære endnu mere.

1 kommentar »

  1. Dennis Hedegaard said,

    juli 10, 2009 at 18:40

    Tjaeh, fakultet kan jo skrives mindre end det der:

    const unsigned long fac(const unsigned n) {
    return n < 2 ? n : n * fac(n – 1);
    }

    er en 1 liner ^^
    hvis du ser på ML er det jo sådan set den samme måde at skrive det på, da fakultet for 0 og 1 er 1, derved alt under 2.

Post a Comment