nuno35 0 Posted July 7, 2019 Report Share Posted July 7, 2019 (edited) Boa Tarde, preciso aqui de uma ajuda tenho estes dois tipos de dados e estou a tentar fazer estas 3 funções ate agr tenho este codigo se alguem me conseguir dar uma ajuda Data Cor = Vermelho | Azul | Cinzento deriving Show Data Carro = Carro cor (Maybe Carro) deriving Show Basicamente pode ir havendo um carro dentro do outro 1 - Recebe um tipo de dado carro e devolve uma lista com todas as cores Lista_Cores :: Carro -> [Cor] Lista_Cores Carro c (Nothing) = [c] Lista_Cores Carro c (Car) = [c] : Lista_Cores Car 2 - Recebe um cor um tipo de dado carro e devolve numero de carros com cor = cor Num_Cor :: Cor -> Carro -> Int Num_Cor cor Carro c (Nothing) = if cor == c then 1 else 0 Num_Cor cor Carro c (Car)= if cor == c then 1 + Num_Cor cor Car 3 - O tipo de dados Cor ser Eq gerada pelo par Vermelho == Azul nao percebo bem esta parte de ser gerada por este par Desde ja Obrigado Edited July 21, 2019 by thoga31 GeSHi Link to post Share on other sites
Baderous 31 Posted April 11, 2020 Report Share Posted April 11, 2020 Quando te pede para o tipo de dados Cor ser um Eq está-te a pedir que tornes esse tipo numa instância da classe Eq: https://hackage.haskell.org/package/base-4.12.0.0/docs/Prelude.html#t:Eq Como podes ver pela definição, para teres um tipo declarado como instância da classe Eq, tens de fornecer como implementação mínima a função (==) ou (/=) (i.e., igual ou diferente: indicar quando duas Cores são iguais ou diferentes). No enunciado, pede-te para consideres que 2 cores são iguais quando uma for Vermelho e a outra Azul, portanto: data Cor = Vermelho | Azul | Cinzento deriving Show instance Eq Cor where (==) Vermelho Azul = True (==) Azul Vermelho = True (==) _ _ = False Só te interessa indicar que é verdade quando uma é Vermelho e a outra Azul, podendo variar a ordem. Tudo o resto é para considerar falso. Assim, para verificar esta implementação, poderias criar os seguintes testes: *Main> let c1 = Vermelho *Main> let c2 = Vermelho *Main> let c3 = Azul *Main> let c4 = Cinzento *Main> c1 == c2 False *Main> c1 == c3 True *Main> c3 == c1 True *Main> c1 == c4 False *Main> c3 == c4 False Nota: atenção ao case-sensitive nas palavras reservadas. "Data" não é o mesmo que "data". Link to post Share on other sites
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