haskell - 如何在 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
解决方案
看来您要么需要一个辅助递归函数来读取num
整数,要么需要一些帮助程序,例如replicateM
,这使得编写代码更容易一些。
replicateM num action
action
准确运行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 结合两者,而不是使用getLine
and then 。read
readLn
推荐阅读
- android - 如何向 Android 应用程序添加更多页面?
- javascript - 查询 Mongodb 的 Openwhisk 操作
- wordpress - 在 Wordpress 中将 zip 文件上传到 Elementor
- docker - 无法在 Macos 上使用自定义 docker 映像开始
- angular - 将空白路由到具有 id 的子组件
- mongodb - 带有 Java 聚合驱动程序的 MongoDB 查询和 Java 代码
- angular - 如何禁用 Angular 服务工作者的预检缓存控制标头(调用事件流时)?
- python - O(1) 奇偶空间复杂度
- python - 为什么我不能重塑 numpy 字符串数组和 ctype 数组?
- python - 如何使用字典映射 tf.data.Dataset 中的值