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

Sign in to follow this  
aquino

Ajuda com exercicios em Haskell

Recommended Posts

aquino

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.