Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Anderson B. Pinheiro
Programação Funcional :
A computação é tratada como uma avaliação de funções
matemáticas;
Ocorrendo o mapeamento dos valores de entrada nos valores
de saída através de uma função;
Introdução
Funcional x Imperativo
Avaliação preguiçosa;
IO usando monadas;
Implementações
Nome_func :: Tipo(ent1)->Tipo(ent2)->...->Tipo(saida)
Tipos: Booleanos
Operações definidas sobre booleanos:
e: &&;
ou: ||;
negação: not;
Tipos: Inteiros
Operações definidas sobre inteiros:
Tipos: Inteiros
Tipos: Inteiros
Podemos definir operadores personalizados em scripts:
-- Função Fatorial
fatorial :: Int -> Int
fatorial 0 = 1
fatorial n = n*fatorial(n-1)
Haskell> fatorial 3
6
Tipos: Funções Recursivas
Os loops das linguagens imperativas podem ser
implementados através de funções recursivas
-- Função Fatorial
fatorial :: Int -> Int
fatorial 0 = 1
fatorial n = n*fatorial(n-1)
Haskell> fatorial 3
6
Listas
Podemos trabalhar com listas de diferentes tipos:
[1,2,3,4,5] :: Int
*‘L’, ‘i’, ‘s’, ‘t’, ‘a’, ‘s’+ :: Char
[True, False] :: Bool
--Soma elementos
somaLista :: [Int] -> Int
somaLista [] = []
somaLista (x:xs) = x + somaLista xs
Onde:
x <- [0..10]: gerador, onde x representa cada elemento da lista;
x^2>3: filtro que determina os elementos a serem operados;
x*2: operação sobre cada elemento que satisfaz o filtro;
Compreensão de Listas
remove :: Char -> [Char] -> [Char]
remove carac str = [ c | c <-str, c /= carac]
filter p x = [ a | a <- x, p a]
take _ [] = []
take 0 _ = []
take n (a:x) = a:take (n-1) x
drop _ [] = []
drop 0 _ = []
drop n (a:x) = drop (n-1) x
zipWith op [x1, x2, x3, ...] [y1, y2, y3, ...] = [op x1 y1, op
x2, y2, op x3 y3, ...]