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

Entendendo funções Haskell

Recommended Posts

aquino

Boa Noite, criei este topico para ajudar a todos no entendimento tanto das funções como nas redefinições de funções. Portanto quem souber explicar ou tiver dúvida ( que é o meu caso poste aí).

Eu estou tendo uma dificuldade para entender a redefinição da função feita pelo user Baderous, que funcionou perfeitamente.

Como ja foi explicado a função foldr tem o tipo:

foldr :: (a -> b -> b) -> b -> [a] -> b

Um simples exemplo do seu uso seria:

foldr (+) 1 [1,2,3]

Onde é passado a função, algum valor e a lista.

Esta é a redefinição usando map

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

A minha dúvida é nesta linha:

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

No final da linha voce utilizou uma lista vazia ([]), e a lista passada por parâmetro (l), essas 2 listas você passou pelo fato de ter usado o lambda não é?!

E também aonde neste codigo esta sendo passada a função, o numero e a lista que é requerido pelo foldr?

Ficaria grato se pudessem me explicar isso.

Abraços

Share this post


Link to post
Share on other sites
Baderous

Essas listas tens de passar sempre (a menos que uses a notação point-free, caso em que apenas tens de passar a 1ª). A lista vazia corresponde ao b do protótipo da função foldr, enquanto que a lista l corresponde à [a]. A notação lambda é apenas uma forma de definir a função que vai ser utilizada pelo foldr para computar os resultados, em nada influencia os outros 2 parâmetros. Se te faz confusão, esse map poderia ser definido assim:

map'' :: (a -> b) -> [a] -> [b]
map'' f l = foldr aux [] l
       where --aux :: a -> [b] -> [b]
             aux x lista = (f x):lista

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.