I understand that Haskell’s filter is a high order function (meaning a function that takes another function as a parameter) that goes through a list checking which element fulfills certain boolean condition.
I don’t quite understand its definition:
filter:: (a->Bool)->[a]->[a]
filter p [] = []
filter p (x:y) | p x = x:filter p y
| otherwise = filter p y
I understand that if I pass an empty list to the function, it would just return an empty list, but how do I read the last two lines?
It uses guards which if you are coming from a language with a C style syntax are a bit similar to the
switchstructure.The last pattern reads: If the function
pevaluates to true with the argumentxthen return the head of the list and the filtered tail of the list. Otherwise just return the filtered tail of the list.You could also rewrite it like so: