Ziel ist es, das Spiel von Nim in Haskell als Schulaufgabe zu codieren. Ich bin neu in Haskell und bekomme seltsames Verhalten, wenn ich versuche, Eingaben zu lesen.Haskell: Grund Lesen Int
Das Ziel ist, zwei ganze Zahlen zu lesen. Statt die erste Nachricht zu drucken, dann auffordert und dann zum zweiten geht, druckt er nur die zwei Nachrichten, und ich bin nicht in der Lage den richtigen Eingang zu geben. Was ist hier falsch?
type Board = [Int] -- The board
type Heap = Int -- id of heap
type Turn = (Int, Int) -- heap and number of stars to remove
readInt :: String -> IO Int
readInt msg = do putStr (msg ++ "> ")
inp <- getChar
let x = ord inp
return x
readTurn :: Board -> IO(Turn)
readTurn b = do heap <- readInt "Select heap:"
amt <- readInt "Select stars:"
print heap
print amt
return(heap, amt)
Warum verwenden Sie 'getChar'? Es ist offensichtlich, dass dies nicht sehr gut zum Lesen von ganzen Zahlen ist, oder? – leftaroundabout
@leftaroundabout, es ist nicht so offensichtlich. In einigen Situationen möchte man vielleicht jedes Zeichen als eine separate Ganzzahl behandeln (basierend auf ASCII oder was auch immer), wie es hier geschrieben wurde; es ist ein wenig, äh, unkonventionell und nicht das, was das Poster will, aber es ist offensichtlich nicht falsch. Immerhin ist 'getChar >> = zurück. ord 'hat den erwarteten Typ: 'IO Int'. – huon