我正在尝试创建一个简短的函数来从整数列表中删除奇数元素,我的代码是:
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
有什么建议么?谢谢!
我正在尝试创建一个简短的函数来从整数列表中删除奇数元素,我的代码是:
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
有什么建议么?谢谢!
你需要
x `mod` 2 == 0
该mod函数返回 a Int,必须先将其转换为 a 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