|
|
C, Java, Pascal, Ada, usw. sind imperative Programmiersprachen. Ein imperatives Programm ist eine Liste von Anweisungen, die nacheinander auf dem Comupter ausgeführt werden und den Zustand des Computers (Speicher,Register,…) ändern. Ein funktionales Programm ist ein einzelner Ausdruck der beim Ausführen zu seinem Wert ausgewertet wird. Ein funktionales Programm beschreibt das "Was" (der Wert des Ausdrucks) und nicht das "Wie" (Anweisungen an eine Maschine).
Für einen Eindruck hier einige kurze Beispiele:
factorial n = product [1..n]
ggt x y
| x == 0 = y
| y == 0 = x
| x >= y = ggt (x `mod` y) y
| otherwise = ggt x (y `mod` x)
-- Man beachte den Typ von Quicksort:
-- Sortiert werden können alle Listen
-- auf deren Elementen eine Ordnung definiert ist
quicksort :: Ord a => [a] -> [a]
quicksort [] = []
quicksort (x:xs) = quicksort [y | y <- xs, y < x]
++ [x]
++ quicksort [y | y <- xs, y >= x]
-- Datentyp Binärbaum mit Suchfunktion
data Tree a
= EmptyTree | Node (Tree a) a (Tree a)
elementOfTree :: Eq a => a -> Tree a -> Bool
elementOfTree element EmptyTree = False
elementOfTree element (Node left entry right)
= (element == entry)
|| elementOfTree element left
|| elementOfTree element right
-- Ein/Ausgabe:
main :: IO ()
main = do
putStr "Text eingeben: "
text <- getLine
putStr "Text in Grossbuchstaben: "
putStr (map toUpper text)
Wir werden mit dem Haskell-Interpreter Hugs arbeiten, der auch für den eigenen PC (Windows, Linux) frei verfügbar ist.
Es werden einfache Methoden des Compilerbaus eingesetzt. Hierfür sind keine Vorkenntnisse erforderlich.
Interesse daran, das funktionale Programmierparadigma kennenzulernen, ist unabdingbar. Wenn Sie glauben, Java ist die Krönung der Programmierung, werden sie hier nicht glücklich.
Vorkenntnisse in Haskell oder Compilerbau werden nicht benötigt.