获得Haskell中所有偶数的总和

时间:2014-03-08 17:53:38

标签: haskell

我正在尝试使用Haskell中的函数获取所有偶数的总和,但它似乎不起作用。

这就是我的代码的样子:

sumEvenNumbers :: [Int] -> Int
sumEvenNumbers n = sum . even

任何人都有解决方案吗?谢谢!

2 个答案:

答案 0 :(得分:6)

你想要sumEvenNumbers = sum . filter even(注意等式左边没有参数)。 even不适用于列表,但适用于单个整数。

更明确的等效词是sumEvenNumbers xs = sum (filter even xs)

答案 1 :(得分:4)

even的类型是even :: (Integral a) => a -> Bool,这意味着你给它一个数字,它会告诉你它是否是偶数。您正尝试将此功能应用于无意义的数字列表。

你想要的是一个函数,它会返回一个偶数的列表。为了实现这一目标,您希望filter具有类型filter :: (a -> Bool) -> [a] -> [a],并且它会将该函数应用于原始列表,并仅返回那些评估为True的内容。

此外,当您要定义一个函数无点样式时,您不需要(实际上,语言不允许您)为函数提供参数,因此n是不必要的。