luchhozito Posted December 28, 2009 at 06:24 PM Report Share #302838 Posted December 28, 2009 at 06:24 PM Tipo da função : (a->Bool) -> [a] -> ([a],[a]) A função tem como objectivo dado um predicado e uma lista, colocar na primeira lista os valores que obedecem ao predicado e na segunda lista os que não obedecem. exemplo: odd [2,3,4,5,6,7,8,9] ([3,5,7,9],[2,4,6,8]) fiz esta funcao, mas tou com dificuldade quando tenho de fazer a recursividade. parte :: (a->Bool)->[a]->([a],[a]) parte _ [] = ([],[]) parte pred (x:xs) | (pred x == True) = ([x],[]) | otherwise = ([],[x]) Link to comment Share on other sites More sharing options...
Baderous Posted December 28, 2009 at 07:22 PM Report Share #302856 Posted December 28, 2009 at 07:22 PM Se o elemento verificar o predicado, entao é adicionado à cabeça da lista que está no 1º elemento do par, senão é adicionado à cabeça da lista do 2º elemento do par, sendo que depois invocas a função recursivamente sobre o par: parte _ [] = ([],[]) parte p (x:xs) | p x = (x:a,b) | otherwise = (a,x:b) where (a,b) = parte p xs Essa função existe no módulo Data.List com o nome de partition e podes ver o seu código fonte aqui. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now