Sei sulla pagina 1di 3

1

Programaao luncional
Linguagens de Programao
2
lormas luncionais
Forma funcional
funo que toma funes como argumentos, produz uma
funo como seu resultado, ou ambos
Em Haskell, chamadas de definies sobre listas
Folding: colocao de um operador entre os elementos de
uma lista
Filtering: filtra alguns elementos de uma lista
Mapping: aplicao de funes a todos os elementos da
lista
3
Lm laskell...
Funes pr-definidas que servem para resolver folding,
mapping e filtering, respectivamente:
foldr1, map e filter
Todas so:
Funes polimrficas
servem para listas de qualquer tipo
High order functions
funes que recebem outras funes como argumento
4
otaivg - foldrJ
Coloca um operador entre os elementos de uma lista
foldr1 () [ x
1
, x
2
, ..., x
n
] = x
1
x
2
... x
n
Definio em Haskell:
foldr1 :: (t -> t -> t) -> [t] -> t
foldr1 f [a] = a
foldr1 f (a:b:x) = f a (foldr1 f (b:x))
Argumentos:
um operador (ou melhor, uma funo com dois argumentos)
uma lista
5
otaivg - foldrJ
Coloca um operador entre os elementos de uma lista
foldr1 () [ x
1
, x
2
, ..., x
n
] = x
1
x
2
... x
n
Definio em Haskell:
foldr1 :: (t -> t -> t) -> [t] -> t
foldr1 f [a] = a
foldr1 f (a:b:x) = f a (foldr1 f (b:x))
Argumentos:
um operador (ou melhor, uma funo com dois argumentos)
uma lista
Exemplos:
Haskell > foldr1 (+) [1,2,3]
6
Haskell > foldr1 (++) [Concatenar ,uma ,lista ,de ,strings ,em ,uma ,s.]
Concatenar uma lista de strings em uma s.
6
Maivg - map
Aplica uma funo a todos os elementos de uma lista
Para se aplicar f em uma lista (a:x), o head ser f aplicado
a, e o tail ser dado por mapear f na lista x
Definio em Haskell:
map :: (t -> u) -> [t] -> [u]
map f [] = []
map f (a:x) = f a : map f x
Argumentos:
uma funo do tipo (t -> u)
uma lista
2

Maivg - map
Aplica uma funo a todos os elementos de uma lista
Para se aplicar f em uma lista (a:x), o head ser f aplicado
a, e o tail ser dado por mapear f na lista x
Definio em Haskell:
map :: (t -> u) -> [t] -> [u]
map f [] = []
map f (a:x) = f a : map f x
Argumentos:
uma funo do tipo (t -> u)
uma lista
Exemplos:
Haskell > map length [Haskell, Hugs, GHC]
[7, 4, 3]
Haskell > map (2*) [1, 2, 3]
[2, 4, 6]
8
itterivg - filter
Filtra a lista por meio de um predicado ou propriedade
Um predicado uma funo que tem tipo t -> Bool
par :: Int -> Bool
par n = (n `mod` 2 == 0)
Definio em Haskell:
filter :: (t ->Bool) -> [t] -> [t]
filter p [] = []
filter p (a:x)
| p a = a: filter p x
| otherwise = filter p x
Argumentos:
uma funo booleana (do tipo (t -> Bool))
uma lista
9
itterivg - filter
Filtra a lista por meio de um predicado ou propriedade
Um predicado uma funo que tem tipo t -> Bool
par :: Int -> Bool
par n = (n `mod` 2 == 0)
Definio em Haskell:
filter :: (t ->Bool) -> [t] -> [t]
filter p [] = []
filter p (a:x)
| p a = a: filter p x
| otherwise = filter p x
Argumentos:
uma funo booleana (do tipo (t -> Bool))
uma lista
Exemplo:
Haskell > filter par [2, 4, 5, 6, 10, 11]
[2, 4, 6, 10]
10
Outras unoes sobre listas
take n: gera uma lista com os n primeiros elementos da
lista parmetro
take :: Int -> [t] -> [t]
drop n: gera uma lista sem os n primeiros elementos da
lista parmetro
drop :: Int -> [t] -> [t]
11
Outras unoes sobre listas
take n: gera uma lista com os n primeiros elementos da
lista parmetro
take :: Int -> [t] -> [t]
drop n: gera uma lista sem os n primeiros elementos da
lista parmetro
drop :: Int -> [t] -> [t]
Exemplo:
Haskell > take 3 [1, 2, 3, 4, 5, 6]
[1, 2, 3]
Exemplo:
Haskell > drop 3 [2, 4, 6, 8, 10]
[8, 10]
12
Outras unoes sobre listas
takeWhile e dropWhile
Seguem o mesmo princpio de take e drop
A diferena est no parmetro:
invs de um nmero, uma funo de tipo (t -> Bool)
takeWhile :: (t -> Bool) -> [t] -> [t]
dropWhile :: (t -> Bool) -> [t] -> [t]
3
13
Outras unoes sobre listas
takeWhile e dropWhile
Seguem o mesmo princpio de take e drop
A diferena est no parmetro:
invs de um nmero, uma funo de tipo (t -> Bool)
takeWhile :: (t -> Bool) -> [t] -> [t]
dropWhile :: (t -> Bool) -> [t] -> [t]
Exemplos:
Haskell > takeWhile par [2,4,5,7, 2]
[2, 4]
Haskell > dropWhile par [2,4,5,7, 2]
[5, 7, 2]
14
Atiidade
Leia a apostila sobre Haskell disponvel na pgina da
disciplina
Em especial, o exemplo que monta uma base de dados
Veja como as funes foldr, map e filter podem ser
aplicadas base construda

Potrebbero piacerti anche