2012-01-16 33 views
6

我想製作一個程序,讀取用戶給出的號碼,然後打印出來。數必須是整數,當我打印出來,但是這個代碼給了我一個解析錯誤:爲什麼Haskell給這個代碼分析錯誤?

main = do 
{ 
     putStrLn "Please enter the number" 
     number <- getLine 
     putStrLn "The num is:" ++ show (read number:: Int) 
} 
+0

實際的錯誤是什麼? – 2012-01-16 05:53:16

+0

3:8:模式解析錯誤:putStrLn – 2012-01-16 05:53:53

+0

這也是我的第一個問題,但你可以很容易地通過查看代碼猜測,所以它沒關係:) – 2012-01-16 05:54:12

回答

10

如果您在do語句中使用括號,你必須使用分號。此外,最後一行應putStrLn $ "The num is:" ++ show (read number :: Int)

所以,你有兩個選擇:

main = do 
{ 
    putStrLn "Please enter the number"; 
    number <- getLine; 
    putStrLn $ "The num is:" ++ show (read number:: Int) 
} 

或:

main = do 
    putStrLn "Please enter the number" 
    number <- getLine 
    putStrLn $ "The num is:" ++ show (read number:: Int) 

幾乎所有我見過的代碼使用第二版本,但他們都是有效的。請注意,在第二個版本中,空白變得很重要。

+0

你能告訴我如何我可以讀取整數直接或如何將其轉換後 – 2012-01-16 06:00:53

+1

您可以使用'readLn :: IO Int'而不是'getLine'。在這個片段中,沒有足夠的信息來推斷它是一個數字而沒有指定它的位置;如果你真的做了一些數字的東西,你可以自己使用'readLn'。 – 2012-01-16 06:04:18

+0

假設用戶輸入10,然後編譯器應該要求用戶輸入10個數字,然後形成一個列表。那怎麼可以用序列來完成呢? – 2012-01-16 06:20:58

1

Haskell認識到Tab字符,你的程序可能因此而失敗。如果您使用Tabs,請將其更改爲空格。

+0

這確實經常會造成麻煩,但這不是問題。 – dfeuer 2016-03-18 15:17:29

相關問題