2015-11-17 2 views
3

Я выполняю упражнения главы 1 Scheme in 48 hours. Для вопроса номер 2, я хотел бы преобразовать строку в число с помощью функции read, но приведенный ниже код не работает.Преобразование строки в число и печать в командной строке

main = do 
    args <- getArgs 
    myNum <- read $ args !! 0 
    putStrLn myNum 

Вот сообщение об ошибке от GHC:

ex2.hs:7:12: 
    No instance for (Read (IO t0)) arising from a use of ‘read’ 
    In the expression: read 
    In a stmt of a 'do' block: one <- read $ (args !! 0) 
    In the expression: 
     do { args <- getArgs; 
      myNum <- read $ (args !! 0); 
      putStrLn myNum } 

ответ

4

Есть несколько вещей, которые здесь не так.

Во-первых, чтобы сохранить переменные в этой функции, вам нужно использовать оператор типа let variable = "something", а не оператор привязки <-. Здесь let myNum = read (args !! 0), который принимает первый аргумент командной строки.

Далее мы используем read для преобразования myNum к типу что-нибудь, но мы должны также четко определить тип (я выбрал Float для этого примера), чтобы напечатать вывод обратно в командную строку. В противном случае вы получите сообщение об ошибке, как, "Prelude.read: no parse"

Код для преобразования из строки на номер обратно Строка выглядит следующим образом ...

main = do 
    -- get command line arguments 
    args <- getArgs 

    -- get the first indexed element; convert it from string to float 
    let myNum = read (args !! 0) :: Float 

    -- print this number to the command line (as a string) 
    putStrLn (show myNum) 
Смежные вопросы