如何将一行一行的用户输入存储为 Haskell 中的整数列表?

How can i store a line by line user input as an integer list in Haskell?

我是 haskell 的新手,我的任务是创建一个程序来合并排序 n 个整数。程序询问要排序的元素有多少,要排序的元素将逐行输入。我什至还没有对它进行排序,但我无法将逐行输入存储在列表中。这是我目前所拥有的。

storedelems = []

inputelems 0 = return storedelems
inputelems n = 
 do
    storedelems <- getLine 
    inputelems (n-1)


main = (inputelems 4)

当我完成按行号输入要排序的行时,它只是 returns []

当你 运行 inputelems 4 你只读到 storedelems 一行就忘记了,毕竟难以忘怀的阅读你只是 return 全局 storedelems 你定义为 [].

对你来说有功能replicateM。要使用它,您首先必须导入模块 Control.Monad:

import Control.Monad (replicateM)

现在您可以这样使用了:

main = replicateM 4 getLine

所以,现在 main 读取 4 行并创建读取字符串列表。

如果你想要整数列表,你可以修改main这样:

main :: IO [Int]
main = replicateM 4 (read <$> getLine)

但是你必须意识到,如果你的函数被命名为 main 是错误的,因为 main 是一个特殊的函数,它的类型必须是 IO ().

您也可以修改您的解决方案:

inputelems 0 = return []
inputelems n = 
 do
    storedelem <- getLine 
    (storedelem : ) <$> inputelems (n-1)

现在您的storedelem不会被遗忘。