我正在尝试使用Haskell中的函数获取所有偶数的总和,但它似乎不起作用。
这就是我的代码的样子:
sumEvenNumbers :: [Int] -> Int
sumEvenNumbers n = sum . even
任何人都有解决方案吗?谢谢!
答案 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
是不必要的。