Upload
natan-mai
View
417
Download
0
Embed Size (px)
Citation preview
PROGRAMAÇÃO FUNCIONAL
Quem sou ?!
Natan J. MaiEstudante de Ciência da Computação, 7º semestre na UFFS.
@NatanJMai - natanjmai.github.io/
Nível: InicianteLinguagem: Haskell
Conteúdo◦ O que é e de onde vem.◦ Diferenças entre paradigmas.◦ Algumas características.◦ Exemplos◦ Quem usa.
INFO
Conteúdo◦ O que é e de onde vem.◦ Diferenças entre paradigmas.◦ Algumas características.◦ Exemplos◦ Quem usa.
INFO
Você devia ensinar o que sabe (mesmo não sendo um especialista) - papodehomem.com.br
O QUE É ?O começo :)
1
O QUE É?
Paradigma Funcional
◦ Forma diferente de computação◦ Baseado no cálculo por funções.◦ Dizemos o que deve ser feito e
não mais como ser feito.◦ Baseado no Cálculo Lâmbda,
apresentado por Alonzo Church na década de 1930.
O QUE É?
Paradigma Funcional
◦ Pense em um problema simples, descobrir (x, y) tal que x + y = 6, assumindo x e y menores que 10.
Obs: (x, y) entre 0 e 10.
O QUE É?
Paradigma Funcional# Atividade 01
$ Criar arquivo atividade01.hs-- code.
$ ghci$ :load atividade01.hs$ fx
O QUE É?
Paradigma Funcional
◦ Este é um problema onde sabemos o que deve ser feito.
◦ No paradigma imperativo teríamos que construir uma forma de resolver.
DIFERENTES PARADIGMASNão, linguagens não são sempre iguais.
2
PARADIGMAS
Um paradigma de programação se refere à forma em que as computações são feitas e organizadas.
◦ O que é lógica de programação?
PARADIGMAS
◦ Alguns principais:
- Funcional- Imperativo- Lógico- Orientado a Objetos
PARADIGMAS
◦ Resumidamente:
- Funcional- Funções, cálculo-λ e recursão.
- Imperativo- If, while, for e por aí vai.
- Lógico- Implicações.
- Orientado a Objetos- Classes, objetos e métodos.
PARADIGMAS
◦ Funcional vs Imperativo
Foco Qual informação é necessária e quais
transformações são necessárias.
Sequência de passos bem (?)
definida.
Ordem de execução
Baixa importância. É o mais importante.
Fluxos Funções e recursividade.
While, if, for.
PARADIGMAS
◦ Exemplos de linguagens:
- Funcional- Haskell, OCaml, Erlang etc.
- Imperativo- C, Java, PHP, etc.
- Lógico- Prolog.
CARACTERÍSTICAS
◦ Algumas das principais características:
- Avaliação preguiçosa.- Funções anônimas.- Funções de alta ordem.- Compreensão de listas.- Currying- Estados imutáveis.
LAZY EVALUATION
Avaliação preguiçosa é a forma em que as linguagens funcionais controlam as avaliações necessárias.
LAZY EVALUATION
LAZY EVALUATION
◦ As expressões não são avaliadas caso não sejam utilizadas. Valores não avaliados não serão utilizados.
◦ O paradigma imperativo utiliza eager evaluation.
LAZY EVALUATION
Exemplo de lazy evaluation:
# Atividade 02Obter os três primeiros números
da lista começando no número 1.
$ Abrir arquivo atividade01.hsComando take.
LAZY EVALUATION
Exemplo de lazy evaluation:
# Atividade 03Obter a primeira tupla do
exercício (01), do x + y = 6.
$ Abrir arquivo atividade01.hsAjustar função anterior.
FUNÇÕES ANÔNIMAS
Funções anônimas são logicamente funções sem nome, mas também sem qualquer tipo de definição anterior.
$ (\x -> x) “Quem sou eu?”
FUNÇÕES ANÔNIMAS
◦ Também conhecidas como funções Lambda.
- Não é necessário definição.- Interessante quando é preciso
funções casuais.- Bastante util quando utilizadas
como parâmetro.
FUNÇÕES ANÔNIMAS
Exemplos de funções anônimas:
$ (\x -> x ^ 3) ((take 1 [10..]) !! 0)$ (\x -> x / 2) 30$ (\x -> x) “Simples assim!”$ (\x -> x) “Qualquer coisa.”
FUNÇÕES DE ALTA ORDEMFunções que recebem outras funções como parâmetro, além de poder retornar uma função como resultado.
$ map (\x -> x ^ 2) [1, 2, 3]
FUNÇÕES DE ALTA ORDEM
◦ Muitas vezes precisamos passar funções como parâmetro.
- Bastante util quando utilizamos funções anônimas.
$ :t map map :: (a -> b) -> [a] -> [b]
Parâmetros da função map(a -> b) - é uma função como parâmetro[a] - é uma lista como parâmetro
[b] é o resultado da função map
FUNÇÕES DE ALTA ORDEM
◦ Map é uma função que recebe uma função e uma lista como parâmetro e aplica a função para todos os itens da lista.
# Atividade 04Criar a nossa própria função
map.
COMPREENSÃO DE LISTASListas desempenham um papel importante em diversas linguagens.
$ [ x | x <- [1..10],
x ^ 2 == 9]
[ ]
COMPREENSÃO DE LISTAS
◦ Qual a diferença entre {(x, 2x) | x ∈ ℕ, x <= 5} e
[(x, 2 * x) | x <- [0..9], x <= 5] ?
- Resposta: Nenhuma!
[(x, 2 * x) | x <- [0..9], x <= 5]Resultado Conj. Entrada Predicado
COMPREENSÃO DE LISTAS
◦ Existem várias funções interessantes para se trabalhar com listas, algumas delas são:
- head [1,2, 3] reverse [1,2,3] - tail [1,2, 3] take 1 [1,2,3] - maximum [1,2,3] last [1,2,3] - minimum [1,2,3] length [1,2,3] - product [1,2,3] sum [1,2,3] ...
COMPREENSÃO DE LISTAS
◦ Se vermos listas como uma centopéia, poderíamos representá-lo assim:
Head Last
Tail
COMPREENSÃO DE LISTAS
# Atividade 05.0- Receber os 14 primeiros valores a
partir de -1 e atribuir em uma ‘variável’ a.
- (Dica > take)
Resultado ->
COMPREENSÃO DE LISTAS
# Atividade 05.1- Para todo valor na lista a,
multiplicar pelo seu quadrado e armazenar em b. Feito isso, reverter a lista b.- (Dica > [... | ...])
Resultado ->
COMPREENSÃO DE LISTAS
# Atividade 05.2- Somar todos esses valores de b.
- Dica > “Soma” em Inglês :)
Resultado ->
COMPREENSÃO DE LISTAS
# Atividade 06- Soma dos quadrados dos 10
primeiros números > 2.
Dicas > “Soma” em Inglês :)
> “take 10”
> “[ .. | .. ]”
Resultado ->
COMPREENSÃO DE LISTAS
# Atividade 07- (x, y, z) tal que (x, y, z) <= 50 e
2x + y - z = 1
3x - y + 2z = 7
x + y + z = 6
Dicas > [ (x, y, z) | x <- [0..50], y <- [0..50], z <- [0..50] .. ]
Resultado ->
COMPREENSÃO DE LISTAS
# Atividade 08Soma dos 5 primeiros números
maiores que 0 tal que o seu quadrado seja maior que 1000.
Dicas > sum (take 5 [ x | x <- [0..], … ]
Resultado ->
CURRYING
Currying é uma técnica capaz de transformar uma função de múltiplos parâmetros em várias funções de apenas um parâmetro.
CURRYING
◦ No fundo, todas as funções em Haskell recebem apenas um parâmetro. Em funções que parecem ser com vários, o que acontece é a técnica de Currying.
CURRYING
Exemplos:# Atividade 06- $ div 10 5 é o mesmo que- $ (div 10) 5
Podemos dizer que (div 10)
recebe o primeiro argumento (10) e retorna uma função aguardando o segundo argumento (5).
CURRYING
Exemplos:# Atividade 06$ div 10 5 é o mesmo que$ (div 10) 5
:t div$ div :: Integral a => a -> a -> a$ div :: Integral a => a -> (a -> a)
São equivalentes.
ESTADOS IMUTÁVEIS
Sem essa de variáveis.
Sem essa de mudança de estados.
Sem essa de novas atribuições.
ESTADOS IMUTÁVEIS
Exemplo:$ p = sum [2, 3, 4, 5]
Um prêmio para o primeiro que conseguir fazer funcionar:
$ p = p - 1
ESTADOS IMUTÁVEIS
◦ Pode parecer estranho, mas restringindo a possibilidade de mudanças de estados trazem vários benefícios, tais como:
- Valores constantes em programas paralelos e concorrentes.
ESTADOS IMUTÁVEIS
- Para a mudança de estados ocorrer, é necessário da criação de um novo estado.
Exemplo:$ p = sum [2, 3, 4, 5]$ q = p - 1
Agora sim.
QUEM USA?
Algumas das principais empresas e produtos que utilizam programação funcional.
?
QUEM USA.
◦ Haskell- Facebook, - Twitter,- Intel,- Microsoft,- NVIDIA
https://wiki.haskell.org/Haskell_in_industry
QUEM USA.
◦ Scala- LinkedIn, - Twitter,- Xerox,- Foursquare,- Sony
http://www.scala-lang.org/old/node/1658
QUEM USA.
◦ Erlang- Facebook, - Whatsapp,
http://www.erlang.org/faq/introduction.html
“
Uma linguagem que não afeta a maneira que você pensa sobre programação, não vale a pena ser aprendida.
Alan Perlis
NATAN
- Todos os códigos estão emgithub.com/NatanJMai
- Slides emslideshare.net/natanmai9
- Dúvidas/Sugestõ[email protected]
Obrigado!
Natan J. MaiEstudante de Ciência da Computação, 7º semestre na UFFS.
@NatanJMai - natanjmai.github.io/
CREDITS
Special thanks to all the people who made and released these awesome resources for free:
◦ Presentation template by SlidesCarnival◦ Photographs by Unsplash◦ Imagens do site learnyouahaskell.
This presentations uses the following typographies and colors:
◦ Titles & body copy: Quicksand
You can download the fonts on this page:http://www.google.com/fonts#UsePlace:use/Collection:Quicksand:300,400,700
Click on the “arrow button” that appears on the top right
◦ Dark gray #2e3037◦ Aqua #39c0ba◦ Salmon #f35b69◦ Blue #6d9eeb
You don’t need to keep this slide in your presentation. It’s only here to serve you as a design guide if you need to create new slides or download the fonts to edit the presentation in PowerPoint®
PRESENTATION DESIGN
SlidesCarnival icons are editable shapes.
This means that you can:● Resize them
without losing quality.
● Change line color, width and style.
Isn’t that nice? :)
Examples: