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

aquino

Entendendo funções Haskell

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

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.