【发布时间】:2016-03-03 16:52:41
【问题描述】:
我试图在第一行读取 n 然后 n 行输入并打印每行前 2 个元素的总和,例如:
输入:
2
1 2
3 4
输出:
3
7
到目前为止,我的代码如下所示:
import Control.Monad
fromDigits = foldl addDigit 0
where addDigit num d = 10*num + d
first (x:xs) = fromDigits x
second (x:xs) = fromDigits xs
main = interact processInput
processInput input = unlines [perLine line | line <- lines input]
perLine line = first line + second line
但我收到以下错误
无法将类型“[Char]”与“Char”匹配
无法将“Char”类型与“[String]”匹配
我是 Haskell 的新手,所以我不确定如何解决它。
【问题讨论】:
-
尝试写出类型,对调试很有帮助!
-
一些提示:
type String = [Char]。你将如何阅读像12 3这样的行来得到答案15?一定有一些东西可以用空格做一些事情。如何将'7'之类的字符转换为7之类可以添加的数字? -
interact一次只处理一行,从不停止。您应该阅读第一行,然后是第一行指定的行数——例如,readLn >>= flip replicateM getLine。processInput的类型必须是[String] -> [String]但interact :: (String -> String) -> IO ()- 还有其他类型错误,但这可能是您特别提到的那个的来源。 -
fromDigits x和fromDigits xs其中之一肯定是错误的。x是Char而xs是[Char]所以类型不匹配。
标签: haskell functional-programming