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

link

Show

5 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

muito obrigado pela a ajuda, ja está resolvido

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora