Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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编写带有签名IO[(Int,Int)]的程序时遇到的问题_Haskell_Input_Io - Fatal编程技术网

用Haskell编写带有签名IO[(Int,Int)]的程序时遇到的问题

用Haskell编写带有签名IO[(Int,Int)]的程序时遇到的问题,haskell,input,io,Haskell,Input,Io,我对程序有一个真正的问题,它应该用签名IO[Int,Int]来编写。 对我来说,作为一个真正的初学者,很难理解它应该是什么样子。 因此,这是一项任务: 您应该编写一个过程,从用户处获取行直到空行。之后,它应该返回每一行的长度。我试图用例子让它更容易理解 *Main>Take KDFDF DFEER 埃雷雷尔 [7,7,7,0] 阅读部分,这是可以理解的,除非,它实际上并不像我想要的那样工作 Read = do putStrLn "User, your turn!" line

我对程序有一个真正的问题,它应该用签名IO[Int,Int]来编写。 对我来说,作为一个真正的初学者,很难理解它应该是什么样子。 因此,这是一项任务: 您应该编写一个过程,从用户处获取行直到空行。之后,它应该返回每一行的长度。我试图用例子让它更容易理解

*Main>Take

KDFDF

DFEER

埃雷雷尔

[7,7,7,0]

阅读部分,这是可以理解的,除非,它实际上并不像我想要的那样工作

Read
 = do
    putStrLn "User, your turn!" 
    line <- getLine
if line==""
    then return ...
    else do
        line <-Read
        return line {- actually doesn't return a line -}

如果有人能让我明白如何写这篇文章,我会非常高兴的。你到底想读什么?由于一些原因,它不会编译。不能以大写字母开头命名函数或常量,它们是为数据构造函数保留的。还有,我相信你知道,但是电话回线。。。在Haskell中不是有效语法

我真的不明白为什么你想要一个成对的列表,如果你只想返回每行的长度,那么像这样的东西就行了

lineLengths :: IO [Int]
lineLengths = do
    putStrLn "User, your turn!"
    line <- getLine
    if line == ""
        then return []
        else do
            moreLines <- lineLengths
            return $ (length line) : moreLines
然后将其与读取功能结合起来,我们可以执行以下操作:

lineLengthPairs :: IO [(Int,Int)]
lineLengthPairs = do
    ls <- lineLengths
    return $ toPairs ls

你到底想让里德做什么?由于一些原因,它不会编译。不能以大写字母开头命名函数或常量,它们是为数据构造函数保留的。还有,我相信你知道,但是电话回线。。。在Haskell中不是有效语法

我真的不明白为什么你想要一个成对的列表,如果你只想返回每行的长度,那么像这样的东西就行了

lineLengths :: IO [Int]
lineLengths = do
    putStrLn "User, your turn!"
    line <- getLine
    if line == ""
        then return []
        else do
            moreLines <- lineLengths
            return $ (length line) : moreLines
然后将其与读取功能结合起来,我们可以执行以下操作:

lineLengthPairs :: IO [(Int,Int)]
lineLengthPairs = do
    ls <- lineLengths
    return $ toPairs ls

回答得很好,因为这个问题给你的回答很少。空字符串应该返回一个0的行长度,否?这取决于。由于程序在空字符串上终止,因此输出中唯一可能出现零的位置是在最终位置,并且由于空字符串是导致程序终止的唯一原因,因此每个输出的最终位置都会有一个零。所以你还是把它删掉吧。谢谢。它真的有效!现在我试着用它来做同样的事情,任务中的内容。为什么我想得到一份配对的清单?我的老师希望如此。在任务中,如果有奇数行,它应该返回0。考虑到这个问题给你的回答是多么少,这个好答案。空字符串应该返回0的行长,否?这取决于。由于程序在空字符串上终止,因此输出中唯一可能出现零的位置是在最终位置,并且由于空字符串是导致程序终止的唯一原因,因此每个输出的最终位置都会有一个零。所以你还是把它删掉吧。谢谢。它真的有效!现在我试着用它来做同样的事情,任务中的内容。为什么我想得到一份配对的清单?我的老师希望如此。在任务中,如果行数为奇数,它实际上应该返回0。