Haskell:转换字符串 - > [名单]

时间:2016-03-03 16:52:41

标签: haskell functional-programming

我试图在第一行读取n然后输入n行并打印每行中前两个元素的总和,如:

输入:

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的新手,所以我不确定如何解决它。

1 个答案:

答案 0 :(得分:2)

一些提示,按顺序:

  • 在某些时候,您需要将数字从Char转换为Int等。
    • 除非你问,否则Haskell不会为你做那件事。使用ord
  • x:xs模式中,xs是列表的其余部分,而不是下一个元素。
    • 这可能是您[Char]Char问题的来源。
  • 看起来您希望将每一行视为一系列单词。
    • 尝试使用words功能。
  • 最后,您需要将数字转换为可打印的输出形式。
    • Haskell也不会为你做那件事。使用show

一般情况下,我建议启动ghci并使用它,只是为了对Haskell有一些基本的了解。在另一个窗口中拉出Hoogle或其他一些Haskell引用...