Jump to content
Sign in to follow this  
dardevil

Arvores

Recommended Posts

dardevil

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

Share this post


Link to post
Share on other sites
Baderous

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.

Share this post


Link to post
Share on other sites
dardevil

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • 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.