next up previous
Next: Vor- und Nachteile von Up: Schülerpraktikum am Institut für Previous: Einfuehrung

Haskell - eine funktionale Programmiersprache

Als Programmiersprache benutzen wir Haskell,die im Gegensatz zu Programmiersprachen wie Java, Pascal oder C keine imperative Sprache, sondern eine funktionale Programmiersprache ist. In Haskell schreibt man in erster Linie was gemacht werden soll und weniger wie es gemacht werden soll. Das ist nebenbeibemerkt für den durchschnittlichen Informatik-Schüler eine ziemlich starke Umstellung, was man angesichts des doch eher befremdlich anmutenden Konzeptes dieser Sprache niemandem übel nehmen sollte. Jetzt kommt natürlich auch noch ein Beispiel, damit spätestens jetzt alle Leute, die noch nichts von Haskell gehört haben, verwirrt sind. Als Beispiel (www.haskell.org) dient das altbekannte Bubblesort, das in C etwa so aussieht:
qsort( a, lo, hi ) int a[], hi, lo;
{
  int h, l, p, t;

  if (lo < hi) {
    l = lo;
    h = hi;
    p = a[hi];

    do {
      while ((l < h) && (a[l] <= p))
          l = l+1;
      while ((h > 1) && (a[l] >= p))
          h = h-1;
      if (l < h) {
	  t = a[l];
	  a[l] = a[h];
	  a[h] = t;
      }
    } while (l < h);

    t = a[l];
    a[l] = a[hi]
    a[hi = t

    qsort( a, lo, l-1 );
    qsort( a, l+1, hi );
  }
}
Und jetzt das ganze in Haskell:

qsort :: Ord a => [a] -> [a]
qsort []     = []
qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
                 where
		   elts_lt_x   = [ y | y <- xs, y < x ]
		   elts_greq_x = [ y | y <- xs, y >= x ]

Zur Erklärung:
Die erste Zeile legt den Typ der Funktion qsort fest: ``Falls a ordbar ist, wandelt qsort eine Liste von a's in eine Liste von a's um.'' In der zweiten Zeile steht: ``Falls die Liste von a eine leere Liste ist, ist das Ergebnis wieder eine leere Liste.'' Und der Rest sagt vereinfacht (wäre zu aufwendig alles durchzugehen, Informatiker sind faul): das Ergebnis ist eine Liste, in der vorne alle sortierten Elemente kleiner $x$, dann $x$ selbst und am Ende alle sortierten Elemente größer $x$ drinstehen. Es ist also offensichtlich, In Haskell wird wirklich nur das aufgeschrieben, was der Mensch auch braucht um das Programm zu verstehen und genau das ist es ja, was eine Sprache tun soll: sie soll eine Verbindung zwischen dem Menschen und der Maschiene schaffen.



Subsections
next up previous
Next: Vor- und Nachteile von Up: Schülerpraktikum am Institut für Previous: Einfuehrung
Robert Rauch 2003-05-12