nuno35 0 Denunciar mensagem Publicado 26 de Janeiro Boa Tarde Tenho aqui um duvida nesta função ghci> transposta ["azul", "verde", "roxo"] ["avr","zeo","urx","ldo","e"] ghci> transposta ["verde", "encarnado"] ["ve", "en", "rc", "da", "er", "n", "a", "d", "o"] Tenho algumas ideias mas tenho sempre o proble de como fazer o resto de x Transposta [[a]] -> [[a]] Trnsposta [] = [] Trnsposta (x:xs) = take 1 x : transposta xs Poderia fazer o drop 1 x para o elemento mas nao estou a ver como Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
pdfrod 11 Denunciar mensagem Publicado 27 de Janeiro A minha sugestão é começar por criar uma função que retorna o primeiro elemento da transposta. Exemplo: > f ["azul", "verde", "roxo"] "avr" E uma função que deita fora o primeiro elemento de cada lista. Exemplo: > g ["azul", "verde", "roxo"] ["zul", "erde", "oxo"] Se tiveres essas duas funções, fica bastante mais fácil implementar a transposta. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
nuno35 0 Denunciar mensagem Publicado 27 de Janeiro fiz essas duas funções: take_t :: [[a]] -> [a] take_t [] = [] take_t (x:xs) = take 1 x ++ take_t xs tail_t :: [[a]] -> [a] tail_t [] = [] tail_t (x:xs) = tail x : tail_t xs mas nao estou bem a perceber o raciocinio Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
nuno35 0 Denunciar mensagem Publicado 27 de Janeiro ok acho que já percebi o raciocínio estava a querer tratar a lista como x:xs mas neste caso com estas duas funções émais fácil trata la como um so elemento: Transposta [[a]] -> [[a]] Transposta [] = [] Transposta lista = take_t lista : Transposta tail_t lista Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites