从列表中删除奇数元素

时间:2013-10-07 19:57:33

标签: haskell

我正在尝试创建一个短函数来从整数列表中删除奇数元素,我的代码是:

removeOdds :: [Int] -> [Int]
removeOdds lst = [ x | x <- lst, x `mod` 2]

编译器返回 -

Type error in boolean qualifier
*** Term           : x `mod` 2
*** Type           : Int
*** Does not match : Bool

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:5)

你需要

x `mod` 2 == 0

mod函数返回Int,必须先将其转换为Bool才能作为条件使用。

另一种解决方案是

evens :: [Int] -> [Int]
evens xs = filter even xs

在进行eta-reduction之后,您甚至可以将其定义为

evens :: [Int] -> [Int]
evens = filter even

虽然我建议使用限制较少的类型签名来允许所有Integral类型,因为even具有签名Integral a => a -> Bool

evens :: Integral a => [a] -> [a]
evens = filter even