------------------------------------------------------------------------ -- Modul fuer eine polymorphe Struktur fuer "Stacks", "Stapel" oder -- "Keller-Speicher" -- Der Keller ist einfach als lineare Liste realisiert. -- Zur Vorlesung 26.11.98 ------------------------------------------------------------------------ module Stack where type Stack a = [a] empty = [] emptystack :: (Stack a) -> Bool emptystack [] = True emptystack (x:l) = False push :: a -> Stack a -> Stack a push x l = (x:l) -- Die folgenden Funktionen sind nur fuer nicht-leere Keller definiert; -- wenn sie auf einen leeren Keller angewendet werden, gibt es einen Fehler! top :: (Stack a) -> a top (x:l) = x pop :: (Stack a) -> Stack a -- pop [] = error (show "Leerer Stack") pop (x:l) = l pop2 :: (Stack a) -> (a, Stack a) -- pop2 [] = error (show "Leerer Stack") pop2 (x:l) = (x,l)