Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 哈斯克尔读了前n行_Haskell_Functional Programming_Stdout_Stdin - Fatal编程技术网

Haskell 哈斯克尔读了前n行

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的输入不会很大,但我想一次一行地计算每一行,假装输入大

我正在努力学习Haskell以适应函数式编程语言。我决定一开始就尝试一些问题。我在阅读stdin和使用haskell的懒惰io进行io时遇到了问题

大多数问题的数据来自以下形式的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