www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Spezi

Gepostet:
11.12.2010 16:11

Schnick Schnack Schnuck  
Hallo,
Ich bin noch ein ziemlicher Anfänger in Haskell und wollte Schnick Schnack Schuck, hat natürlich nicht so geklappt wie ichs wollte; Parse error in pattern, das case zeug ist wohl falsch, aber keine Ahnung was, sind bestimmt auch noch einige andere Fehler drin:

import System.Random

main = do
putStrLn \\\"Hallo! \\\\n, nimmst du Brunnen, Stein, Schere oder Papier?\\\"
auswahl <- getLine
zufallszahl <- randomRIO(1,4)
putStrLn $ \\\"Du hast \\\" ++ auswahl ++ \\\",\\\\n der Gegner hat \\\" ++ gegAuswahl zufallszahl ++ \\\" gewaehlt\\\"
print ergebnis

gegAuswahl :: Int -> String
gegAuswahl z | z==1 = \\\"Brunnen\\\"
| z==2 = \\\"Stein\\\"
| z==3 = \\\"Schere\\\"
| z==4 = \\\"Papier\\\"

gewonnen = \\\"Du hast gewonnen, ich bin stolz auf dich!!!\\\"

ergebnis = case (auswahl, gegAuswahl) of (\\\"Brunnen\\\", \\\"Stein\\\") || (\\\"Brunnen\\\", \\\"Schere\\\") -> gewonnen
of (\\\"Stein\\\", \\\"Schere\\\") -> gewonnen
of (\\\"Schere\\\", \\\"Papier\\\") -> gewonnen
of (\\\"Papier\\\", \\\"Brunnen\\\") || (\\\"Papier\\\", \\\"Stein\\\") -> gewonnen
of (auswahl, auswahl) -> \\\"Unentschieden\\\"
of (_, _) -> \\\"Leider verloren...\\\"


Dankeschön (-:

edit: habe das case zeug durch guards ersetzt, aber ich kann die Variable auswahl aus dem IO zeug nicht benutzen, (wie) kann man das?
import System.Random

main = do
putStrLn \"Hallo! \\n, nimmst du Brunnen, Stein, Schere oder Papier?\"
auswahl <- getLine
zufallszahl <- randomRIO(1,4)
putStrLn $ \"Du hast \" ++ auswahl ++ \",\\n der Gegner hat \" ++ gegAuswahl zufallszahl ++ \" gewaehlt\"
print ergebnis

gegAuswahl :: Int -> String
gegAuswahl z | z==1 = \"Brunnen\"
| z==2 = \"Stein\"
| z==3 = \"Schere\"
| z==4 = \"Papier\"

gewonnen = \"Du hast gewonnen, ich bin stolz auf dich!!!\"

ergebnis | z == (\"Brunnen\", \"Stein\") || z == (\"Brunnen\", \"Schere\") = gewonnen
| z == (\"Stein\", \"Schere\") = gewonnen
-- of (\"Schere\", \"Papier\") -> gewonnen
-- of (\"Papier\", \"Brunnen\") || (\"Papier\", \"Stein\") -> gewonnen
-- of (auswahl, auswahl) -> \"Unentschieden\"
-- of (_, _) -> \"Leider verloren...\"
where z = (auswahl, gegAuswahl)
Zum Seitenanfang    
 
Landei

Gepostet:
08.04.2011 15:34

   
Besser spät als nie, und da ich bei IO sowieso Nachholbedarf habe:


import System.Random
import Control.Monad

main = do
putStrLn \"Nimmst du Stein (1), Schere (2) oder Papier (3)?\"
auswahl <- liftM read getLine
zufallszahl <- randomRIO(1,3)
putStrLn $ \"Du hast \" ++ wort auswahl ++ \" und der Gegner hat \" ++ wort zufallszahl ++ \" gewaehlt\"
putStrLn $ ergebnis auswahl zufallszahl

wort :: Int -> String
wort n = [\"Stein (1)\", \"Schere (2)\",\"Papier (3)\"] !! (n - 1)

ergebnis :: Int -> Int -> String
ergebnis a b | a == b = \"Ein Unentschieden!\"
| (a,b) `elem` [(1,2),(2,3),(3,1)] = \"Du hast gewonnen, ich bin stolz auf dich!!!\"
| otherwise = \"Tut mir leid, du hast verloren.\"


Den Brunnen habe ich mal weggelassen. Am längsten habe ich gefrickelt, um auswahl direkt zu einer Zahl zu machen (obwohl es im Nachhinein ganz logisch ist).
Zum Seitenanfang