首页 > 解决方案 > 如何在 Haskell 中读取/添加/打印数字字符串

问题描述

下面是我现在的代码。我希望能够接受如下用户输入:“6 1 2 3 4 5 6”并获取总和并打印。了解如何使用输入的第一个数字作为总数也很酷。所以这里第一个数字是 6,输入的总数是 6。

提前感谢您帮助我解决这个问题。我已经研究了几个星期,但无法弄清楚。

main = do
    putStrLn "Enter how many numbers:" -- clearer
    num<-getLine
    putStrLn("Enter a number: ")
    numberString <- getLine 
    let numberInt =(read numberString :: Int)
    print (numberInt*4)
    main

标签: haskell

解决方案


看来您要么需要一个辅助递归函数来读取num整数,要么需要一些帮助程序,例如replicateM,这使得编写代码更容易一些。

replicateM num actionaction准确运行num时间,并将所有操作结果收集到一个列表中。

main = do
    putStrLn "Enter how many numbers:" -- clearer
    num<-getLine
    numbers <- replicateM num $ do
       putStrLn("Enter a number: ")
       numberString <- getLine
       return (read numberString :: Int)
    -- here we have numbers :: [Int]
    ...

然后,您可以从那里继续。


如果您想使用辅助功能,则可以编写

readInts :: Int -> IO [Int]
readInts 0 = return []
readInts n = do
    putStrLn("Enter a number: ")
    numberString <- getLine
    otherNumbers <- readInts (n-1)   -- read the rest
    return (read numberString : otherNumbers)

最后,我们可以直接使用which 结合两者,而不是使用getLineand then 。readreadLn


推荐阅读