将整数读入现有列表

时间:2014-03-27 20:36:48

标签: haskell

我知道read将字符串转换为整数。如何正确使用read并附加到theList

theList = []

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

问题陈述是theList <- (read inputNum)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

不,您无法插入现有列表。

在Haskell列表中,列表是不可变的,您可以使用:++等函数从现有列表创建新列表。