M. Sperber Sommersemester 1997
Funktionale Programmierung
Blatt 4
Abgabe: 16.5.1997
returnST :: a -> ST s a thenST :: ST s a -> (a -> ST s b) -> ST s bnewVar :: a -> ST s (MutVar s a) readVar :: MutVar s a -> ST s a writeVar :: MutVar s a -> a -> ST s ()
newArr :: (Int,Int) -> b -> ST s (MutArr s Int b) readArr :: MutArr s Int b -> Int -> ST s b writeArr :: MutArr s Int b -> Int -> b -> ST s () freezeArr :: MutArr s Int b -> ST s (Array Int b)
Außerdem gibt es noch eine Operation runST, die auf ein Objekt vom Typ ST s a angewendet das Resultat der Berechnung vom Typ a liefert. (Der Typ von runST läßt sich nicht als normaler Haskell-Typ schreiben.)
Nach :load ST bzw. :load STArray (und danach :also <file>) stehen diese Operationen zur Verfügung. freezeArr ist dazu da, um ein veränderbares Array in ein normales Haskell-Array zu verwandeln. (Siehe Haskell-Report.)
Programmieren Sie in Haskell einen Zustandstransformator, der einen Bubble''=Sort auf Arrays durchführt, also etwa folgenden Typ hat:
bubbleSortST :: (Ord a) => MutArr s Int a -> (Int, Int) -> ST s ()