Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

luchhozito

[Resolvido]recursividade em pares de listas

Mensagens Recomendadas

luchhozito

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])

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.