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

aquino

Ajuda com exercicios em Haskell

Mensagens Recomendadas

aquino

Decidi criar outro topico, e criar um mais produtivo. Obrigado ao Baderous, por favor moderação apague este topico e desculpe qualquer coisa.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Só percebendo bem como funcionam essas 2 funções é que conseguirás escrever uma solução correcta. Uma vez percebidas, definir as funções recorrendo a essas 2 funções é muito fácil.

Para o caso da função length, tens de usar o map para transformar a lista de elementos numa lista que só tem 1's, isto é, se tiveres uma lista [1,4,5,7], deves transformá-la em [1,1,1,1]. De seguida é só aplicar a função sum que, somando os elementos dessa lista, devolve o seu comprimento.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Sim, a função map pode ser definida dessa forma. Eu defini usando a função (:) em vez da função ++, porque tenho ideia que esta última é menos eficiente nesta situação (penso que ela tem de percorrer a lista toda por cada concatenação efectuada):

map' :: (a -> b) -> [a] -> [b]
map' f l = foldr (\x y -> (f x):y) [] l

Gostaria que me ajudasse só em mais uma dúvida:

Na função map, eu posso fazer algo do tipo map f (map g xs) sendo que f e g sejam funções quaisquer?

Sim.

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.