leg*_*iko -1 haskell functional-programming list-comprehension list filter
有没有办法使用列表推导编写Haskell过滤器函数的实现?
一个错误不断出现,我很难理解如何处理它.这就是我所拥有的:
filter' :: (a -> Bool) -> [a] -> [a]
filter' _ [] = []
filter' f xs = [f x | x <- xs]
Run Code Online (Sandbox Code Playgroud)
任何指导或链接将不胜感激.
是的,你可以写成:
filter' :: (a -> Bool) -> [a] -> [a]
filter' f xs = [x | x <- xs, f x]Run Code Online (Sandbox Code Playgroud)
如果在list comprehension中添加一个求值为布尔值的表达式,那么您已经为列表推导添加了一个过滤器:只有在这里f x求值时True,我们才会添加x到列表中.
请注意,写作filter' _ [] = []是无用的:如果你提供一个空的列表,然后将列表解析也将返回一个空列表,因为x永远不会挑值超出xs用x <- xs.
但通常最好使用filter :: (a -> Bool) -> [a] -> [a]内置.