如何将一行一行的用户输入存储为 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
不会被遗忘。
我是 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
不会被遗忘。