Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

link

Show

Recommended Posts

link

Boas,

Antes de mais bom 2009; tenho aqui outra dúvida que é a seguinte, eu quero fazer o words disto:

words (pontos ( pontHorizontal ( transpose ( casasvazias tab ) ) 1 1 1 ) ) ),

o pontos ( pontHorizontal ( transpose ( casasvazias tab ) ) 1 1 1 ) ) vai dar um resultado do tipo 1 2 0 0 2 6,

como o words tem que receber uma string então fiz words (show (pontos ( pontHorizontal ( transpose ( casasvazias tab ) ) 1 1 1 ) ) ) ) ), mas isto dava me um erro a dizer que tinha que declarar uma instância do (Show (IO () ) ).

Como eu disto de declarar instâncias de classes não percebo quase nada queria que me dissessem como é que declaro a instância ou se houver outra maneira de resolver isto que me dissessem algo. Agradecia a vossa ajuda.

Já agora a função pontos é assim:

pontos [] = putStr ""
pontos (x:xs) = do subst x
       	         pontos xs

subst l =  putStr (show ponto ++ " ")     
      	   where ponto = case (l) of
  	       	0 -> 0
		1 -> 0
		2 -> 1
		3 -> 3
		4 -> 6
		5 -> 10

Cumps.

Share this post


Link to post
Share on other sites
mpalhas

penso que isso dá erro porque estás a tentar fazer o show de um valor IO String quando o show apenas aceita String

se for isso não precisas de declarar instância nenhum, apenas tens que fazer algo deste tipo:

funcao = do
...
  pontuacao <- pontos ( pontHorizontal ( transpose ( casasvazias tab ) ) 1 1 1 )
  let palavras = words (show pontuacao)

Share this post


Link to post
Share on other sites
link

hmm fiz isto aqui para testar o que tu disseste:

palavras tab = pontos ( pontHorizontal ( transpose ( casasvazias tab ) ) 1 1 1 )
lista tab =  do pontuacao <- palavras tab
      	     	let listaa =  words (show pontuacao)
	    --lista2 = converte listaa
	    --soma = foldl (+) 0 lista2
	putStr (show listaa)

so pus a lista a aparecer a ver se dava resultado, mas o resultado que me dá é só o (show pontuacao), não faz o words, ou seja aparece assim 3 0 0 0 0 1 0 0 0 ..... ["()"]

obrigado desde já pela resposta

Share this post


Link to post
Share on other sites
Rui Carlos

Estás a aplicar a função words a um resultado da função pontos. O tipo da função pontos é IO (). Ou seja, essa função apenas imprime coisas no ecrã, e não devolve qualquer resultado que a função words possa usar.

Share this post


Link to post
Share on other sites
link

xiii eu tava a fazer uma complicação por causa disso lol

muito obrigado pela a ajuda, ja está resolvido

Cumps

Share this post


Link to post
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

×

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.