Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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:转换字符串->;[名单]_Haskell_Functional Programming - Fatal编程技术网

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

Haskell:转换字符串->;[名单],haskell,functional-programming,Haskell,Functional Programming,我尝试读取第一行的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 = intera

我尝试读取第一行的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
   
import-Control.Monad
fromDigits=foldl添加数字0
其中addDigit num d=10*num+d
第一(x:xs)=来自数字x
秒(x:xs)=来自数字xs
main=交互进程输入
processInput=unlines[perLine | line一些提示,顺序如下:

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

一般来说,我建议启动
ghci
并使用它,只是为了对Haskell有一些基本的了解。在另一个窗口中打开Hoogle或其他Haskell引用…

尝试编写类型,这将对调试有很大帮助!一些提示:
type String=[Char]
。你将如何阅读像
12 3
这样的一行来得到答案
15
?一定有一些东西与空格有关。你将如何将像
'7'
这样的字符转换成一个数字,你可以添加像
7
这样的数字?
交互
一次只处理一行,从不停止。你应该阅读第一行t行,则正好是第一行指定的行数-例如,使用
readLn>=flip replicItem getLine
processInput
的类型必须是
[String]->[String]
interactive::(String->String)->IO()
-还有其他类型错误,但这可能是您特别提到的错误的来源。
来自数字x
来自数字xs
其中一个肯定是错误的。
x
Char
xs
[Char]
因此类型不匹配。