Softwarepraktikum

Funktionales Programmieren und Compilerbau

Prof. Tobias Nipkow
Norbert Schirmer

[logo]

Inhaltsverzeichnis

Ausführliche Seiten zum Praktikum

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).

Was ist Haskell?

Haskell ist eine moderne funktionale Programmiersprache. Gegenüber älteren funktionalen Programmiersprachen wie Lisp zeichnet sich Haskell insbesondere durch eine lesbarere und komfortablere Syntax, ein sehr ausdrucksstarkes Typsystem und vollständige Seiteneffektfreiheit (referenzielle Transparenz) aus.

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.

Ablauf des Praktikums

Da das Praktikum keine Kenntnisse in Haskell voraussetzt, werden in der ersten Hälfte des Praktikums die Grundlagen der funktionalen Programmierung in Haskell mit verschiedenen Übungsaufgaben eingeführt. Danach soll eine Laufzeitumgebung für eine einfache imperative Programmiersprache entwickelt werden: Die Aufgaben werden in Gruppen von 2-3 Personen bearbeitet.

Es werden einfache Methoden des Compilerbaus eingesetzt. Hierfür sind keine Vorkenntnisse erforderlich.

Termine

Mittwochs von 13.30-15.00 Uhr ab dem 17.10.2001, im Raum 1546

Voraussetzung für die Teilnahme

Nur für Studenten des 3. Semesters.

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.

Weitere Informationen

Ich beantworte gerne weitere Fragen zum Praktikum persönlich oder per E-Mail.
Norbert Schirmer
Last modified: Fri Oct 26 09:28:07 MET DST 2001