Haskell 哈斯克尔读了前n行
我正在努力学习Haskell以适应函数式编程语言。我决定一开始就尝试一些问题。我在阅读stdin和使用haskell的懒惰io进行io时遇到了问题 大多数问题的数据来自以下形式的stdin:Haskell 哈斯克尔读了前n行,haskell,functional-programming,stdout,stdin,Haskell,Functional Programming,Stdout,Stdin,我正在努力学习Haskell以适应函数式编程语言。我决定一开始就尝试一些问题。我在阅读stdin和使用haskell的懒惰io进行io时遇到了问题 大多数问题的数据来自以下形式的stdin: n data line 1 data line 2 data line 3 ... data line n 其中n是来自stdin的以下行数,下一行是数据 如何在n行中的每一行上运行程序,一次运行一行,然后将解决方案返回到stdout 我知道stdin的输入不会很大,但我想一次一行地计算每一行,假装输入大
n
data line 1
data line 2
data line 3
...
data line n
其中n是来自stdin的以下行数,下一行是数据
如何在n行中的每一行上运行程序,一次运行一行,然后将解决方案返回到stdout
我知道stdin的输入不会很大,但我想一次一行地计算每一行,假装输入大于内存中所能容纳的,只是为了学习如何使用haskell。您可以使用
交互
,与行一起一次处理来自stdin的数据。下面是一个示例程序,它使用interactive
访问stdin,行
分割每条换行上的数据,列表理解将函数perLine
应用于输入的每一行,以及unlines
将perLine
的输出重新组合在一起
main = interact processInput
processInput input = unlines [perLine line | line <- lines input]
perLine line = reverse line -- do whatever you want to 'line' here!
这将在读取和处理前十行后终止程序。您也可以使用简单的递归:
getMultipleLines :: Int -> IO [String]
getMultipleLines n
| n <= 0 = return []
| otherwise = do
x <- getLine
xs <- getMultipleLines (n-1)
return (x:xs)
getMultipleLines::Int->IO[String]
getMultipleLines n
|n
getMultipleLines :: Int -> IO [String]
getMultipleLines n
| n <= 0 = return []
| otherwise = do
x <- getLine
xs <- getMultipleLines (n-1)
return (x:xs)
main :: IO ()
main = do
line <- getLine
let numLines = read line :: Int
inputs <- getMultipleLines numLines