FSaraiva Posted November 11, 2009 at 07:40 PM Report Share #295661 Posted November 11, 2009 at 07:40 PM Boa Tarde. Sei que sou reincidente neste fórum e nao pensem que nao ando a ver se entendo esta linguagem mas é que cada vez está mais complicado e para voçes deve ser canja... Por isso ajudem-me please. O problema é o seguinte: Definir a função searchList :: (α -> Bool) -> [α] -> Maybe [α] que devolve os elementos da lista dada que satisfaçam o predicado dado (através do construtor Just), ou Nothing no caso contrário. mas o problema é que eu consigo fazer recursivamente e só para um elemento e queria que apresenta-se uma lista dos elementos que satisfazem o predicado search :: (a -> Bool) -> [a] -> Maybe a search p = foldr (\x xs -> if p x then Just x else xs) Nothing Exemplo do resultado esperado que me retorna recursivamente mas nao é o objectivo Main> searchList (>0) [-10..10] Just [1,2,3,4,5,6,7,8,9,10] Main> searchList (>0) [-10..0] Nothing Obrigado desde já Link to comment Share on other sites More sharing options...
Rui Carlos Posted November 11, 2009 at 07:55 PM Report Share #295666 Posted November 11, 2009 at 07:55 PM Não percebi nada do post... O teu texto está um bocado confuso. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
FSaraiva Posted November 11, 2009 at 09:06 PM Author Report Share #295689 Posted November 11, 2009 at 09:06 PM Aquele código que eu coloquei só me apresenta Just [o primeiro elemento que satizfaz a condiçao do predicado] mas eu preciso de uma maneira que apresenta Just [todos os elementos da lista que satisfaçam o predicado] ou Nothing caso nenhum elemento da lista satisfaça a condiçao.,.. Espero ter sido explicito. Link to comment Share on other sites More sharing options...
Rui Carlos Posted November 11, 2009 at 09:21 PM Report Share #295693 Posted November 11, 2009 at 09:21 PM Na função \x xs -> if p x then Just x else xs, quando p x se verifica, estás apenas a devolver o x, em vez de adicionar o x ao resultado já calculado (o xs). O tipo de dados da função que definiste está errado. Devia ser Maybe [a] e não Maybe a. Também não percebi muito bem a ideia de usar o Maybe. Se nenhum elemento verificasse a condição, devolvias a lista vazia. O facto de usares o Maybe vai complicar o problema. Tens duas alternativas, e crias uma função que apenas calcule a lista dos elementos que verificam a condição (basicamente, implementas o filter), e no final vês se a lista é ou não vazia, e em função disso devolves Nothing ou Just ..., ou então, se quiseres usar aquele Nothing que tens para o caso de paragem (em vez de uma lista vazia), em vez de apenas adicionar o x à lista xs, vais ter que verificar se o xs é Nothing ou um Just ... para decidires o que fazer. Rui Carlos Gonçalves 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