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

nuno35

Função recursiva transporta

Mensagens Recomendadas

nuno35

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

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

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

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

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 os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.