实现过滤功能haskell

时间:2017-10-22 19:04:17

标签: list haskell filter functional-programming list-comprehension

有没有办法使用列表推导来编写Haskell过滤器函数的实现?

错误不断出现,我对如何接近它感到难过。这就是我所拥有的:

filter' :: (a -> Bool) -> [a] -> [a]
filter' _ [] = []
filter' f xs = [f x | x <- xs]

非常感谢任何指导或链接。

1 个答案:

答案 0 :(得分:7)

是的,你可以把它写成:

filter' :: (a -> Bool) -> [a] -> [a]
filter' f xs = [x | x <- xs, f x]

如果在列表推导中添加一个表达式,并且计算结果为布尔值,那么您已经为列表推导添加了一个过滤器:只有当f x在此计算为True时,我们才会添加{{ 1}}到列表。

请注意,编写x是没用的:如果您提供一个空列表,那么列表推导也会返回一个空列表,因为filter' _ [] = []永远不会从x中选择一个值与xs

但通常最好使用内置的filter :: (a -> Bool) -> [a] -> [a]