Escolar Documentos
Profissional Documentos
Cultura Documentos
• Programação funcional
• Linguagens funcionais
• Haskell
– Casamento de padrões
• Resumo
Introdução
Introdução • Programação funcional é
baseada no conceito de funções
matemáticas
cubo(x) = x * x * x
• Composição de funções (h = f ° g)
f(x) = x + 2
g(x) = x* x
h(x) = f(g(x))
= (3 * x) + 2
PROGRAMAÇÃO FUNCIONAL
Programação Funcional
• Um programa no paradigma funcional é uma função, o qual pode ser
uma composição de outras funções
Alan Turing
Programação funcional
• Não usam variáveis como endereços de memória
• Usam recursão ao invés de iterações
• Não possuem efeitos colaterais – dados os mesmos
parâmetros sempre dará o mesmo resultado
Alonzo Church (transparência referencial)
Exemplo
http://haskell.org
LINGUAGENS FUNCIONAIS
Linguagens ● Algumas linguagens funcionais famosas
Funcionais ○ LISP ( John McCarthy , 1960)
○ Puramente funcional
○ Avaliação lazy
Principais • LISP
• Haskell
– Compilador GHC
• ML
– Sintaxe similar a ML
– Puramente funcional
• Conceitos fundamentais de
Haskell
Casamento Avaliação
de Padrões Preguiçosa
Funções de
ordem superior
Casamento de
Padrões
• Função definida por várias equações, cada uma com um padrão
no seu lado esquerdo
fib :: Int -> Int
fib 0 = 0 -- equação aplicada ao caso 0
fib 1 = 1 -- equação aplicada ao caso 1
fib n = fib (n-1) + fib (n-2) -- equação aplicada nos outros casos
• Vantagens
– Concisão e clareza
– Mais próxima de uma definição matemática
Casamento de
Padrões
• Forma tradicional para definição de funções via uma única
equação (possivelmente condicional)
• Implementação em Haskell
fun :: (Float, Float) -> (Float, Float)
fun (a,b) = (x1, x2) where
x1 = a * a
x2 = b * b * b
● Operadores
● Concatenação (++)
○ [1, 3, 5] ++ [2, 4, 6] -> [1, 3, 5, 2, 4, 6]
● – Infixo de lista (:)
○ 5:[2, 7, 9] -> [5, 2, 7, 9]
● Séries aritméticas (..)
○ [1, 3..11] -> [1, 3, 5, 7, 9, 11]
● Tamanho de lista (length)
○ length [2, 4, 6] -> 3
Exemplos
• Exemplos
– Cubo dos números de 1 a 50
cubo :: [Int]
cubo = [ n * n * n | n <- [1..50] ]
Simplicidade
• Linguagens funcionais
pares :: [Integer]
pares = [0, 2..]
quadrados :: [Integer]
Exemplo
Qual o problema?
Exemplo
• Desvantagens
– Semântica complicada
Obrigado
CREDITS: This presentation template was created by Slidesgo,
including icons by Flaticon, and infographics & images by Freepik