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

K3nshin

Problema

8 mensagens neste tópico

Boas ppl! Olhem,é o seguinte. quero fazer uma função que verifique se um caracter é um digito ou não. Eu fiz o seguinte:

isDigit::Char->Bool

isDigit car= ver var 48

                    where

                          ver car num

                                    |num==58                                 

                                    |car== '\num'                                    =true

                                    |otherwise                                          =ver car (num+1)

Ou seja a minha ideia é verificar atravas dos caracteres aos quais os digitos correspondem. Por exemplo o caracter '\48' corresponde ao '0'. So que o meu problema esta a ser na comparação, não me deixa fazer a comparação dakela forma. Alguem me pode explicar o porque e dar uma ajuda a resolver?

Agradeço desde ja a paciência.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só precisas de verificar se o caracter é maior ou igual ao caracter zero e se é menor ou igual do que o caracter 9.

caso queiras comparar com o inteiro, podes converter o caracter através da função 'fromEnum'.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja resolvi o problema. Em vez de estar com aquilo tudo lol, pus antes o seguinte:

isDigit::Char->Bool

isDigit car= ('0'<=car) && (car<='9')

Mas continuo a estar interessado na explicação em relação a não poder comparar da forma como fiz ali em cima. De certeza que é devido a chamar o valor da variavel "num" daquela forma... Inda penso mt como C lol.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ups, desculpa Rui. N tinha visto a tua resposta. Pois , foi o que eu acabei por fazer para resolver o problema.Não sabia isso da função fromEnum. Vou investigar isso, thx.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o Haskell é uma linguagem fortemente tipada, não tens a liberdade com tipos de dados que tens em C, aqui tudo tem quer ter os tipos certos, o que obriga a usar funções como 'fromEnum', 'fromIntegral', 'fromInteger', etc. para fazer conversões de tipos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas! Tenho uma outra duvida. Eu estava a tentar definir uma função que me faça a concatenação de uma lista de listas. Pelo que eu percebi o objectivo ser pegar nesta lista de listas e fazer uma unica lista composta pelos elementos das listas que compoem a lista de listas. Então eu tentei fazer o seguinte:

concate::[[int],[int]]->[int]

concate [[],[]]=[]

concate [(x;xs),[]=x:[xs,[]]

concate [[],(l:ls)]=l:[[],ls]

concate [(x:xs),(l:ls)]=x:l: concate [xs,ls]

Ora o problema esta em que o hugs esta a stressar com a minha definição de tipo, implica com a virgula e não estou a perceber pk, pk ate se eu retirar a definição de tipo, pois esta é opcional visto k o hugs faz a definição automaticamente, a função funciona. Alguem me consegue dizer qual a definição correcta de uma lista de listas?

abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o tipo está errado!

assim já funcionaria.

concate::[[int]]->[int]

ou se quiseres só para duas listas

concate :: ([int],[int])->[int]

não percebi exactamente o que pretendes, tens para aí mais erros no código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah bommmm. Ja percebi a minha parvoice lol. Obrigado Rui. Pois é possivel que tenha mais erros para ai é k o pc onde estou a fazer os execicios n tem net e ao passar o codigo dum lado po outro pode dar em asneira. Basicamente o que estou a fazer é ao receber [ [1,2,3],[4,5,6]] retorno uma so lista constituida por [1,4,2,5,3,6]. Vou é alterar isto para por a lista ordenada. Mas pronto é isso, obrigado.

Abraço

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