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