gpt4 book ai didi

haskell - 如何处理来自标准输入的数据,逐行,最大次数并在Haskell中打印行数

转载 作者:行者123 更新时间:2023-12-04 13:02:24 25 4
gpt4 key购买 nike

此代码从标准输入的第一行读取要处理的行数,然后循环 number_of_lines_to_process 次进行一些计算并打印结果。
我希望它在“#”之后打印“Line #”中的行号,但我不知道如何获取它

import IO
import Control.Monad (replicateM)

main :: IO ()

main = do
hSetBuffering stdin LineBuffering
s <- getLine
let number_of_lines_to_process = read s :: Integer
lines <- replicateM (fromIntegral(number_of_lines_to_process)) $ do
line <- getLine
let number = read line :: Integer
result = number*2 --example
putStrLn ("Line #"++": "++(show result)) --I want to print the number of the iteration and the result
return ()

我想这个问题的解决方案真的很简单,但是我不熟悉 Haskell(第一次在里面编码),我也没有找到任何方法。任何人都可以帮忙吗?

最佳答案

您可以使用 forM_ 而不是 replicateM :

import IO
import Control.Monad

main :: IO ()
main = do
hSetBuffering stdin LineBuffering
s <- getLine
let number_of_lines_to_process = read s :: Integer

forM_ [1..number_of_lines_to_process] (\i -> do
line <- getLine
let number = read line :: Integer
result = number * 2
putStrLn $ "Line #" ++ show i ++ ": " ++ show result)

请注意,因为您使用 forM_ (丢弃每次迭代的结果)你不需要额外的 return ()最后 - do block 返回最后一条语句的值,在本例中为 ()forM_ 返回.

关于haskell - 如何处理来自标准输入的数据,逐行,最大次数并在Haskell中打印行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10382448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com