#include "head.html"

List-Monade: verzweigende Rechnungen

Der Typkonstruktor List ist eine Monade. Wir haben die Vorstellung von einer Liste von möglichen Ergebnissen (einer nichtdeterministischen Rechnung).
instance Monad [] where
    return x  =  [x]
    xs >>= f  =  concat ( map f xs )

concat :: [[a]] -> [a]
concat = foldr (++) []

-- Beispiel: concat [ "frob", "ni", "", "cate" ] = "frobnicate"

Wort-Ersetzungs-Systeme

#include "../src/Rewrite.hs"
Wortersetzung ist ein Berechnungsmodell. Für beliebige Systeme sind deswegen alle "interessanten" Eigenschaften unentscheidbar. Jedoch kann man eingeschränkte Systeme betrachten, zum Beispiel solche mit nur einer Regel (wie die Beispiele eben). dafür gibt es zwei große offene Fragen: Siehe dazu http://www.lri.fr/~rtaloop/95.html und dort angegebene Literatur. Anyone for a Diplomarbeit darüber?

Grammatiken

Wir treffen Wort-Ersetzungs-Systeme außerdem bereits im Grundstudium als Regelmengen von Grammatiken.
data Grammatik = Grammatik
               { terminale      :: String
               , nichtterminale :: String
               , startsymbol    :: Char
               , regeln         :: [ (String, String) ]
               }
Damit beschäftigt sich derzeit das dritte Semester. Siehe Grammatik-Simulator-Programm. Übungsaufgabe: schreibe dazu #include "foot.html"