Ja richtig, allerdings hat das damit nichts zu tun. Die Namensgebung ist sicher etwas verwirrend.
Kleine Erklärung: Bei imperativen Sprachen (C, C++, Pascal und alles was du sicher sonst so kennst) schreibt man genau auf, was die CPU tun soll. Man gibt ihr Befehle (daher der Name imperativ, kommt aus dem Latein). Die CPU arbeitet dann genau die Befehle ab, die der Programmierer vorgegeben hat.
Nicht so bei den funktionalen SPrachen wie Haskell. Hier definiere ich das zu lösende Problem als mathematische Funktion (daher der Name). Im Hintergrund kümmert sich jetzt eine Art Interpreter darum, aus meiner mathematischen Anweisung Befehle für die CPU zu erzeugen. Aber ich als Programmierer muß mir darum keine Gedanken machen, ich definiere nur mein mathematisches Problem.
Zur verdeutlichung der Quicksort-Algorithmus in Haskell:
Code:
qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
Ein einfacher Zweizeiler. Die erste Zeile sagt nur: Wird Quicksort auf eine leere Liste [] angewendet, ist das Ergebnis eine leere Liste.
Zweite Zeile: Wird Quicksort auf eine Liste von mehreren Zahlen angewendet, von denen die erste x heißt und alle weiteren mit xs bezeichnet werden, dann ist das Ergebnis eine Liste von Zahlen, die so aufgebaut ist:
Links steht das Ergebnis von Quicksort angewendet auf alle Zahlen aus xs, die kleiner sind als x, in der Mitte steht x selbst, rechts steht das Ergebnis von Quicksort angewendet auf alle Zahlen größer als x.
Damit ist der Sortieralgorithmus Quicksort mathematisch exakt definiert. Wie die CPU das jetzt intern ausrechnet, ist mir völlig egal.
In C/C++ oder jeder anderen imperativen Sprache müsste man genau mittels Schleifen, if-Abfragen usw. der CPU sagen, was zu tun ist.
Lesezeichen