dardevil Posted July 9, 2012 at 06:58 PM Report Share #468096 Posted July 9, 2012 at 06:58 PM (edited) Boas pessoal!! Gostava que pudessem dar uma vista de olhos neste código para ver se tenho alguma coisa errada. Então é assim tenho: data Tree a = Null | Node a (Tree a) (Tree a) Tornar este tipo numa instância das classes Eq e Show. Eu fiz o seguinte mas não sei se está correto. iguala :: Tree a -> Tree a -> Bool iguala Null Null = 0 == 0 iguala (Node a Tree b Tree c) (Node d Tree e Tree f) = a == d && b == e && c == f iguala _ _ = False instance Eq Tree a where (==) = iguala instance Show Tree a where shoe(Node esq dir) = (show Node) ++ "/" ++ (show esq) ++ "/" ++ (show dir) Se virem algo de errado (que é o mais provável) gostava que me corrigissem. Abraço. Edited July 9, 2012 at 07:11 PM by Baderous geshi Link to comment Share on other sites More sharing options...
Baderous Posted July 9, 2012 at 08:36 PM Report Share #468105 Posted July 9, 2012 at 08:36 PM Nenhuma delas está totalmente correcta. Na instância de Eq, em 1º lugar tens que dizer que para definir uma Tree a como instância de Eq, então os elementos da árvore têm também de ser instâncias de Eq: instance Eq a => Eq (Tree a) where Depois a forma como comparas 2 árvores nulas não faz sentido nenhum, não percebo porque é que para Null ser o mesmo que Null, 0 tem de ser o mesmo que 0. Se ambas são Null então são iguais. Dá True. Depois na comparação de 2 árvores não nulas, os argumentos não estão bem definidos, não se mete Tree b nem Tree c nem nada disso, mete-se uma letra que se sabe que será um Tree a, portanto retira lá os "Tree" dos 2 argumentos. Na instância de Show, a mesma coisa que referi em primeiro lugar para os elementos da árvore tem de ser feito. Falta também indicar o caso da árvore ser Null. No caso que definiste falta no argumento a variável que identifica a raiz da árvore. Não é "Node", isso é o construtor do tipo. Link to comment Share on other sites More sharing options...
dardevil Posted July 9, 2012 at 10:34 PM Author Report Share #468116 Posted July 9, 2012 at 10:34 PM Obrigado pela ajuda!! Por acaso quando ia a comparar duas árvores não nulas tinha posto esq e dir mas depois pensei que não era correto e coloquei o Tree b e o Tree c. Ty pelas dicas 🙂 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