Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

RafaelOliveira

Concatenar tipos de dados diferentes

Mensagens Recomendadas

RafaelOliveira    0
RafaelOliveira

Boas, tenho um ficheiro que tem informação do tipo

 [Tipo1 x x x x, Tipo1 x x x x],

e outro do tipo:

 [Tipo2 x x x, Tipo2 x x x]

Como posso concatenar estes dois ficheiros?? Porque com o ++ ele da-me erro pois os tipos são diferentes

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

Se estás a falar de concatenar os 2 ficheiros, referes a concatenar o texto dos 2?

É que se for isso o ++ devia funcionar, porque estamos a falar de concatenar 2 strings.

Ou estás a referir algo diferente?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RafaelOliveira    0
RafaelOliveira

Eu quero concatenar o texto dos dois ficheiros, contudo um é do "Tipo1 x x x x" e o outro é "Tipo2 x x x"

são tipos diferentes e tem campos diferentes os dois

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RafaelOliveira    0
RafaelOliveira

Mas continua a não dar. Eu tenho isto

 let text1 = (ficheiro com informação tipo [Tipo1 x x x, Tipo1 x x x] ;
     text2 = (ficheiro com informação tipo [Tipo1 x x x, Tipo1 x x x] ;
     text3 = (ficheiro com informação tipo [Tipo2 x x x x, Tipo2 x x x x]; 
     textt = text1  ++ text2  ++ text3;

Se concatenar o text1 ++ text2 dá tudo direito, pois a informação dos ficheiros é do mesmo tipo

Contudo se concatenar text1  ++ text2  ++ text3 dá erro pois diz que o text3 é de outro tipo

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Polmax    0
Polmax

Sempre podes criar um tipo 3

data Tipo3 = T1 Tipo1 |T2 Tipo2
        deriving Show


funcao ::[Tipo1]->[Tipo2]->[Tip3]
funcao [] []=[]
funcao t1 t2=t1++t2

--e depois no let fazes por exemplo
text4 = funcao (text1++text2) text3

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

Sempre podes criar um tipo 3

data Tipo3 = T1 Tipo1 |T2 Tipo2
        deriving Show


funcao ::[Tipo1]->[Tipo2]->[Tip3]
funcao [] []=[]
funcao t1 t2=t1++t2

--e depois no let fazes por exemplo
text4 = funcao (text1++text2) text3

Isso nem funciona, não se podem concatenar listas de tipos diferentes.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

data Tipo1 = Tipo1 String Int deriving Show
data Tipo2 = Tipo2 Float String deriving Show
data Tipo3 = T1 Tipo1 | T2 Tipo2 deriving Show

fx :: [Tipo1] -> [Tipo2] -> [Tipo3]
fx [] [] = []
fx t1 t2 = t1++t2

    Couldn't match expected type `Tipo3' against inferred type `Tipo1'
      Expected type: [Tipo3]
      Inferred type: [Tipo1]
    In the first argument of `(++)', namely `t1'
    In the expression: t1 ++ t2
Failed, modules loaded: none.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Polmax    0
Polmax

Ninguem disse que ele tinha que chapar o que eu escrevi , aquilo é uma ideia pra fazer

ele vai ler um ficheiro e passa pra um data do tipo 1

le outra vez e passa pra um data do tipo 2

o que eu disse era que podia criar um novo data que podia ser do tipo 1 ou 2

depois é so ler o ficheiro original e em vez de passar pro tipo 1 ou tipo 2 passa pro tipo 3 que pode ser 1 ou 2

e assim ja fica com a lista com os dois tipos

Outra diferença com o que escreveste baderous

é que o problema dele é em juntar listas de datas nao juntar listas de inteiros ou floats nem nada disso , ele nos dois datas que tem vai receber sempre strings como argumento

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

Outra diferença com o que escreveste baderous

é que o problema dele é em juntar listas de datas nao juntar listas de inteiros ou floats nem nada disso , ele nos dois datas que tem vai receber sempre strings como argumento

Estás a dizer que ele vai ter coisas tipo:

data Tipo = T String String String

? Se sim, isso não muda nada.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Polmax    0
Polmax

O que ele esta a fazer é :

Criou dois datas , vai sempre receber strings mas não vão ter o mesmo numero de argumentos

ele lê um ficheiro e dependendo de uma condição passa ou pro data um ou pro data 2

e depois tem listas destes dois tipos , vai tentar junta-las e como é óbvio não consegue

O que eu sugeri era criar um data 3 que seja T1 Tipo1 | T2 Tipo 2

depois faz uma função

função (recebe data1) = escreve aqui a condição de passar pro data 1

função recebe data2) = escreve aqui a condição de passar pro data dois

agora vai ler o ficheiro que tinha e a função vai criar uma lista com data 3 , que vai ter ambos , os do tipo 1 e do tipo 2

efectivamente o que eu escrevi nem sequer compila mas era para ele ter uma ideia

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade