Korrekturen Übung 04
Im Übungsblatt 4 wurden Module aus dem package random-extras benutzt, was sich wohl nicht
überall problemlos installieren lässt. Auch gab es typos (Exps statt Exp) in Abschnitt 3. Ich habe
eine korrigierte Version hochgeladen. Danke an Vitaly und Matthias für die Hinweise!
Hier die diffs für Uebung04.lhs :
diff --git a/exercises/Uebung04.lhs b/exercises/Uebung04.lhs
index e3babdf..a78677e 100644
--- a/exercises/Uebung04.lhs
+++ b/exercises/Uebung04.lhs
@@ -26,9 +26,7 @@
> module Uebung4 where
> import Data.List (intercalate)
-> import Data.Random
-> import Data.Random.Source.DevRandom
-> import Data.Random.Extras
+> import System.Random (randomRIO)
\section{Binärbäume}
@@ -178,12 +176,12 @@ die eine mit '(' und ')') korrekt geklammerte String-Darstellung,
2. Schreiben Sie eine Funktion
-< eval :: (Num a) => Exps a -> a
+< eval :: (Num a) => Exp a -> a
die den Wert eines Ausdrucks nach den üblichen Regeln der Arithmetik
berechnet! (z.B. |eval exp1 = -31|) ({\bf 1pt})
-3. Modifizieren Sie |Ops| und |Exps| so, dass auch Quotienten
+3. Modifizieren Sie |Ops| und |Exp| so, dass auch Quotienten
dargestellt werden können und implementieren Sie eine Evaluierungsfunktion
< eval2 :: (Integral a) => Exp2 a -> Maybe a
@@ -374,7 +372,8 @@ werden
< where
< winMoves = pMoves (canWin p) (B b)
< remisMoves = pMoves (canEnforceRemis p) (B b)
-< pickMove bs = runRVar (choice (map Just bs)) DevRandom
+< pickMove bs = randomRIO (0, length bs - 1) >>= return . Just . (bs !!)
+
und schliesslich können wir Tic-Tac-Toe spielen:
@@ -409,8 +408,8 @@ und schliesslich können wir Tic-Tac-Toe spielen:
< else getPlayerMove p b
< chooseMyMove p b = do
< putStrLn "Let me think..."
-< b' <- goodMove (other p) (B b)
-< where other X = O; other O = X
+< b' <- let other X = O in
+< let other O = X in goodMove (other p) (B b)
< case b' of
< Nothing -> finMessage b "Ok, you win."
< (Just b'') -> play p b''
(END)