takeWhile : recebe uma condição e uma lista e retorna o segmento inicial da lista cujos elementos satisfazem a condição dada
takeWhile :: (a -> Bool) -> [a] -> [a]
takeWhile p [] = []
takeWhile p (x:xs) | p x = x : takeWhile p xs
| otherwise = []
> takeWhile (>3)
[5,7,1,8,2]
dropWhile : recebe uma condição e uma lista e retorna a lista sem o segmento inicial de elementos que satisfazem a condição dada
dropWhile :: (a -> Bool) -> [a] -> [a]
dropWhile p [] = []
dropWhile p (x:xs) | p x = dropWhile p xs
| otherwise = x:xs
> dropWhile (>3) [5,7,1,8,2]
[1,8,2]
span : É uma função que calcula simultaneamente o resultado das funções takeWhile e dropWhile. Ou seja, span p l = (takeWhile p l, dropWhile p l)
span :: (a -> Bool) -> [a] -> ([a],[a])
Exemplo :
A função lines (do Prelude) que parte uma string numa lista de linhas :
lines :: String -> [String]
lines [] = []
lines s = let (l,r) = span (/='\\n') s
in case r of
[] -> [l]
x:r -> l : lines r
> lines " **\\n**edjw\\tjqwji**\\n**23jsj**\\n\\n**4853h"
[" ","edjw\\tjqwji","23jsj", " ","4853h"]