我想製作一個程序,讀取用戶給出的號碼,然後打印出來。數必須是整數,當我打印出來,但是這個代碼給了我一個解析錯誤:爲什麼Haskell給這個代碼分析錯誤?
main = do
{
putStrLn "Please enter the number"
number <- getLine
putStrLn "The num is:" ++ show (read number:: Int)
}
我想製作一個程序,讀取用戶給出的號碼,然後打印出來。數必須是整數,當我打印出來,但是這個代碼給了我一個解析錯誤:爲什麼Haskell給這個代碼分析錯誤?
main = do
{
putStrLn "Please enter the number"
number <- getLine
putStrLn "The num is:" ++ show (read number:: Int)
}
如果您在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)
幾乎所有我見過的代碼使用第二版本,但他們都是有效的。請注意,在第二個版本中,空白變得很重要。
你能告訴我如何我可以讀取整數直接或如何將其轉換後 – 2012-01-16 06:00:53
您可以使用'readLn :: IO Int'而不是'getLine'。在這個片段中,沒有足夠的信息來推斷它是一個數字而沒有指定它的位置;如果你真的做了一些數字的東西,你可以自己使用'readLn'。 – 2012-01-16 06:04:18
假設用戶輸入10,然後編譯器應該要求用戶輸入10個數字,然後形成一個列表。那怎麼可以用序列來完成呢? – 2012-01-16 06:20:58
實際的錯誤是什麼? – 2012-01-16 05:53:16
3:8:模式解析錯誤:putStrLn – 2012-01-16 05:53:53
這也是我的第一個問題,但你可以很容易地通過查看代碼猜測,所以它沒關係:) – 2012-01-16 05:54:12