Ani*_*il 0 haskell functional-programming
我来自Python,我很难学习Haskell.例如,我得到了这个合并列表的功能.所以第一件事是合并列表然后我想返回合并列表的总和.正确的语法怎么样?
merge:: [[a]] -> [a]
merge xss = foldr (++) [] xss
return sum []
Run Code Online (Sandbox Code Playgroud)
只有删除最后一行,这段代码才有效.但我想返回合并列表的总和.
现在你唯一得到的是一个编译时错误,抱怨你的代码中有多个错误 - 我想最好的方法是阅读一些有关haskell语法的内容(例如http://learnyouahaskell.com)
merge :: [[a]] -> [a]
Run Code Online (Sandbox Code Playgroud)
您必须添加类型类约束,因此您可以添加列表的元素 - 现在您说您的函数适用于您可以想到的所有可能元素.
merge:: Num a => [[a]] -> [a]
Run Code Online (Sandbox Code Playgroud)
要在"合并"之后求和,你必须声明一个中间变量,如果你想像你开始那样写它.
merge xss = let tmp = foldr (++) [] xss
in sum tmp
Run Code Online (Sandbox Code Playgroud)
或者你可以写得更短
merge xs = sum $ concat xs
Run Code Online (Sandbox Code Playgroud)
或者如果你想要甚至更短的点免费
merge = sum . concat
Run Code Online (Sandbox Code Playgroud)