2016-05-10 15 views
2

Ich versuche, von meiner Konsole eine string oder nur eine char zu bekommen und in einer Variablen zu speichern.Wie kann ich getLine oder getChar in haskell verwenden?

Ich habe versucht, zu verwenden:

> let x = getChar 
> x 
> c -- for getting a char. 

Aber nichts gespeichert ist (gleich für getLine), wie kann ich tun? Hier

+0

nicht zu weit in dieses Tutorial sie in einem Zeichen lesen: https://www.haskell.org/tutorial/io.html –

Antwort

1

von der Konsole lesen, vielleicht nicht sehr nützlich ist. Sie sollten jedoch <- konstruieren.

Zum Beispiel (ohne " ist zu gut):

>myString <- getLine 
>"Hello world" 

oder

>myChar <- getChar 
>c 

Weitere schlage ich here

2

ist ein Beispiel

main = do 
    x <- getLine 
    putStrLn $ "Here is the string you typed in: " ++ x 
5

Die Art der getChar ist IO Char zu lesen. Es ist keine Funktion, die Char zurückgibt; Es handelt sich um eine IO-Aktion, die bei Ausführung Char zurückgibt. (Während subtil, diese Unterscheidung ist von entscheidender Bedeutung für das Verständnis, wie Haskell IO führt mit reinen Funktionen.)

Die Linie

let x = getChar 

bindet nur den Namen x auf den gleichen IO Aktion (die man später sehen können, indem Sie :t x in GHCi). Das Eingeben von x führt dann diese Aktion aus; GHCI wartet darauf, dass Sie ein Zeichen eingeben, dann gibt es das Zeichen sofort zurück.

Um getChar in einem Programm zu verwenden, müssen Sie es innerhalb einer IO-Monade verwenden, mit so etwas wie

main = do ch <- getChar 
      print ch 

oder

main = getChar >>= print 
+0

Danke für Ihre Antwort, es ist sehr genau, aber ich fragte nach der Verwendung direkt von der Konsole. –

+0

@ user4929787 (Ich denke, Sie beziehen sich auf die Verwendung von innen 'ghci' ... wenn ich falsch annahm, lass es mich wissen!) Versuchen Sie' ch <- getChar' anstatt 'lost ch = getChar'. – BalinKingOfMoria

Verwandte Themen