Jump to content

Erro ao tentar inserir numa árvore


crislanio_macedo
 Share

Recommended Posts

data Arv a = No a (Arv a) (Arv a) | Vazia deriving Show

-- *Main> foldr inserirAVL Vazia [3,1,2]
-- No 2 (No 1 Vazia Vazia) (No 3 Vazia Vazia)
-- *Main> foldr inserirAVL Vazia [4,3,2,1]
-- No 3 (No 2 (No 1 Vazia Vazia) Vazia) (No 4 Vazia Vazia)
-- inserir :: Ord a => a -> Arv a -> Arv a


inserir x Vazia = No x Vazia Vazia
inserir x (No e esq dir)
| x==e = No e esq dir
| x<e	 = No e (inserir x No esq) dir
| x>e	 = No e esq (inserir x No dir)


Prelude> :l arvore.hs
[1 of 1] Compiling Main			 ( arvore.hs, interpreted )
arvore.hs:27:25:
Couldn't match expected type `Arv a1 -> Arv a1'
		 with actual type `Arv a1'
The function `inserir' is applied to three arguments,
but its type `a1 -> Arv a1 -> Arv a1' has only two
In the second argument of `No', namely `(inserir x No esq)'
In the expression: No e (inserir x No esq) dir
arvore.hs:27:35:
Couldn't match expected type `Arv a1'
		 with actual type `a0 -> Arv a0 -> Arv a0 -> Arv a0'
In the second argument of `inserir', namely `No'
In the second argument of `No', namely `(inserir x No esq)'
In the expression: No e (inserir x No esq) dir
arvore.hs:29:29:
Couldn't match expected type `Arv a1 -> Arv a1'
		 with actual type `Arv a1'
The function `inserir' is applied to three arguments,
but its type `a1 -> Arv a1 -> Arv a1' has only two
In the third argument of `No', namely `(inserir x No dir)'
In the expression: No e esq (inserir x No dir)
arvore.hs:29:39:
Couldn't match expected type `Arv a1'
		 with actual type `a2 -> Arv a2 -> Arv a2 -> Arv a2'
In the second argument of `inserir', namely `No'
In the third argument of `No', namely `(inserir x No dir)'
In the expression: No e esq (inserir x No dir)
Failed, modules loaded: none.
Edited by crislanio_macedo
Link to comment
Share on other sites

crislanio_macedo,

Certamente já tiveste tempo de perceber que neste fórum o pessoal está sempre disponível para as dúvidas dos outros; temos todo o gosto em ajudar quem por cá passa.

No entanto, os teus posts têm sido cada vez mais difíceis de compreender.

  • os teus títulos são confusos: de que me serve ter no título a definição de um tipo de dados?
  • os teus excertos de código nunca têm coloração -- é necessário aprenderes a utilizar o fórum devidamente, para facilitar o trabalho de quem te quer ajudar
  • os teus excertos de código são desorganizados, sem linhas em branco e sem indentação, o que dificulta (mais uma vez) o trabalho de quem te quer ajudar

Penso que dá para ter uma ideia de onde quero chegar. Só queria mesmo deixar claro que ainda não respondi a este tópico precisamente porque o aspecto do teu post intimida e tira a vontade de o ler.

Corrige lá o que falei e podemos falar do problema que tens com o código nessa altura.

Link to comment
Share on other sites

Apesar do título estar agora melhor (menos confuso), o post deveria ter algum tipo de texto.

Da forma que está, parece que simplesmente deixaste cair o código como uma bomba no fórum e respectivo missal de erros, e quem quiser que leia e ajude -- isto só te prejudica.

E quanto à coloração do código, há inúmeras pessoas a escrever diariamente neste fórum sem qualquer problema na utilização correcta das tags para código. Normalmente os vossos problemas devem-se à utilização do editor avançado (aquele que permite colocar texto em itálico, negrito, etc) -- a solução ideal é desactivar esse modo e escrever os posts directamente em BBCode. Poderás investigar isso no teu tempo livre.

Mas deixemos estas questões de lado (só desta vez).

Relativamente ao teu problema, parece-me que a questão se deve às duas linhas finais da tua função inserir:

inserir x Vazia = No x Vazia Vazia
inserir x (No e esq dir)
 | x == e = No e esq dir
 | x < e  = No e (inserir x No esq) dir   -- onde tens "No esq" deveria ser apenas "esq"
 | x > e  = No e esq (inserir x No dir)   -- onde tens "No dir" deveria ser apenas "dir"

Tenta perceber o porquê de ser como eu digo e não como tu tinhas.

Link to comment
Share on other sites

Em 14/03/2015 às 18:33, crislanio_macedo disse:

Quando eu tento adicionar alguma cor no código, dá erro, e fica a tag da cor e não muda a cor quando eu visualizo o tópico.

É óbvio que não funciona - o código está dentro das tags CODE, as quais ignoram o BBCode.

O @pwseo refere-se ao uso apropriado das tags CODE, indicando a linguagem para que seja feito highlight. Eu tenho feito o highlight dos teus tópicos - nunca te apercebeste? -, mas já começa a chegar a altura de seres tu a fazê-lo.

O objectivo é que o código fique assim...

data Arv a = No a (Arv a) (Arv a) | Vazia deriving Show

... em vez de ...

data Arv a = No a (Arv a) (Arv a) | Vazia deriving Show

Knowledge is free!

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
 Share

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