Haskell:转换字符串->;[名单]
我尝试读取第一行的n,然后读取n行输入,并打印每行前2个元素的总和,例如: 输入: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
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]
因此类型不匹配。