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

phplove

map , filter , foldr.foldl

6 mensagens neste tópico

Boas malta eu so novo nesta andansas e gostava de seber com e  que fumcionao e para que serve as funcoes de orde suprior , map , filter , foldr.foldl

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O map aplica uma função a todos os elementos de uma lista.

O filter filtra os elementos de uma lista que verificam uma determinada propriedade.

O foldr e foldl aplicam recursivamente uma operação sobre uma lista.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim mas como é que funciona internamente ?  sera que dava para dar um exemplo com explicaçao?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim mas como é que funciona internamente ?  sera que dava para dar um exemplo com explicaçao?

map odd [1,2,3,4,5] vai devolver [ True,False,True,False,True], pois aplicou a função que testa se os elementos da lista são pares ou ímpares.

Se em vez do map usares o filter, vai ter como resultado 1,3,5, pois apenas ficam os valores que verifiquem a condição de serem ímpares.

Para os folds, faz uma pesquisa no fórum, que já há por aí informação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

repara nas funçoes:

-----------------------------------------
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = (f x) : (map f xs)
------------------------------------------------
filter :: (a -> Bool) -> [a] -> [a]
filter p [] = []
filter p (x:xs) 
                   | (p x) = x : (filter p xs)
                   | otherwise = filter p xs
--------------------------------------------
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f z [] = z
foldr f z (x:xs) = f x (foldr f z xs)
--------------------------------------------
foldl :: (a -> b -> a) -> a -> [b] -> a
foldl f z [] = z
foldl f z (x:xs) = foldl f (f z x) xs
-------------------------------------------------
--para entenderes melhor a difrença entre estas duas ultimas ve estes exemplos:

foldr (-) 8 [4,7,3,5] =>4 ( - 7 ( - 3 (5 -  8))) =>3
foldl (-) 8 [4,7,3,5] => (((8 - 4) -7) -3) -5 =>-11
-----------------------------------------

0

Partilhar esta mensagem


Link 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