Jump to content

Arvores


dardevil

Recommended Posts

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 by Baderous
geshi
Link to comment
Share on other sites

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.