如何在Haskell中存储逐行用户输入作为整数列表?



我对haskell非常陌生,我的任务是创建一个合并排序n个整数的程序。程序询问要排序多少个元素,要排序的元素将被逐行输入。我甚至还没有得到排序,但我有麻烦,存储一行一行的输入在一个列表。这是我目前掌握的信息。

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

main = (inputelems 4)

当我按行号输入我想要排序的行时,它只返回[]

当你运行inputelems 4时,你只是读到storedelems一行,然后忘记它,在所有难忘的读取之后,你只是返回全局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不会被忘记了。

最新更新