Jump to content

Entendendo funções Haskell


aquino
 Share

Recommended Posts

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

Link to comment
Share on other sites

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
Link to comment
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
 Share

×
×
  • Create New...

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.