2014-03-27 68 views
1

我知道read將字符串轉換爲整數。如何正確使用read並附加到theList將整數讀入現有列表

theList = [] 

inputList = do 
inputNum <- getLine 
if null inputNum 
    then do putStrLn "Done" 
    else do theList <- (read inputNum) 
      inputList 

問題陳述是theList <- (read inputNum)

+0

在Haskell,列表是不可變的。 – Sibi

+0

太棒了。 – derp

回答

4

Haskell中的值是不可變的,這意味着在聲明它們後不能修改它們。不要認爲Haskell具有變量,而是認爲它具有靜態值。

你可以在這種情況下,做的是建立一個IO動作,將返回所有值的列表鍵入:

inputList :: IO [Int] 
inputList = do 
    inputNum <- getLine 
    if null inputNum 
     then do 
      putStrLn "Done" 
      return [] 
     else do 
      rest <- inputList 
      let num = read inputNum 
      return $ num : rest 

然後你可以使用它作爲

import Data.List 

main :: IO() 
main = do 
    putStrLn "Enter some numbers..." 
    nums <- inputList 
    putStrLn "The numbers you entered from smallest to largest are:" 
    let sortedNums = sort nums 
    mapM_ print sortedNums 
+0

我可以將'nums'作爲列表使用嗎?排序,按索引查找等。 – derp

+0

@derp是的。如果你有一個動作'someAction :: IO a'並且你看到'someVar < - someAction',那麼'someVar'具有'a'類型。這意味着'nums'的類型是'[Int]'。 – bheklilr

+0

在main中使用'sort nums'似乎不適用於我。給我一些關於''Int'與'()'匹配的內容 – derp

2

不,你不能插入到現有列表。

在Haskell列表是不可變的,您可以使用:++等函數從現有列表中創建一個新列表。