import System.IO
makeGrid :: Int -> Int -> a -> [[a]]
makeGrid x y = replicate y . replicate x
startGame = do
putStrLn "Select a difficulty (1,2): "
difficulty <- getLine
|difficulty == '1' = makeGrid 3 3 False
|difficulty == '2' = makeGrid 5 5 False
|otherwise = putStrln "Wrong thing"
some function --start from beginning again
Wie Sie sehen, habe ich eine Funktion makeGrid. Ich möchte Benutzereingaben in startGame nehmen und makeGrid basierend auf der Benutzereingabe aufrufen. Mach auch wenn möglich eine while-Schleife, wie soll ich das machen?Wie akzeptiere ich Benutzereingaben und Anruffunktionen basierend auf diesen?
'| Schwierigkeit == '1' =' ist nicht die richtige Syntax hier. Versuchen Sie 'if ... then ... else' oder' case'. –
In Haskell teilt man normalerweise Dinge in Funktionen auf. Sie könnten also eine 'parseDifficulty'-Funktion haben, die von einer Zeichenfolge (doppelte Anführungszeichen für Zeichenfolgen und einfache Anführungszeichen für Zeichen) wie" 1 "' zu einer "Vielleicht schwierig" wie "Einfach einfach" geht. Dies könnte durch eine 'readDifficulty :: IO-Schwierigkeits-Funktion wie' readDifficulty = putStrLn "Schwierigkeit?" >> (fmap parseDifficulty getLine) >> = \ d -> Fall d von Just d -> return d; Nichts -> readDifficulty'. Beachten Sie, dass dies auch zeigt, wie eine IO-Aktion wiederholt werden kann. Wenn Sie Fälle in einem 'do' machen wollen, brauchen Sie einen' case'. –
Sie müssen auch den Inhalt des do-Blocks einrücken. – kuoytfouy