SlideShare a Scribd company logo
1 of 55
Download to read offline
PROGRAMAÇÃO
FUNCIONAL
Quem sou ?!
Natan J. Mai
Estudante de Ciência da Computação, 7º
semestre na UFFS.
@NatanJMai - natanjmai.github.io/
Nível: Iniciante
Linguagem: 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 PARADIGMAS
Nã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 02
Obter os três primeiros números
da lista começando no número 1.
$ Abrir arquivo atividade01.hs
Comando take.
LAZY EVALUATION
Exemplo de lazy evaluation:
# Atividade 03
Obter a primeira tupla do
exercício (01), do x + y = 6.
$ Abrir arquivo atividade01.hs
Ajustar 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
ORDEM
Funçõ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 04
Criar a nossa própria função
map.
COMPREENSÃO DE
LISTAS
Listas 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:
HeadLast
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 08
Soma 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 em
github.com/NatanJMai
- Slides em
slideshare.net/natanmai9
- Dúvidas/Sugestões
natan.mai@hotmail.com
Obrigado!
Natan J. Mai
Estudante 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:

More Related Content

What's hot

Algoritmo e lógica de programação - Aula 1
Algoritmo e lógica de programação - Aula 1Algoritmo e lógica de programação - Aula 1
Algoritmo e lógica de programação - Aula 1
engenhariadecomputacao
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
Bruno Grange
 
Gestão de Projetos de TI em Empresas
Gestão de Projetos de TI em EmpresasGestão de Projetos de TI em Empresas
Gestão de Projetos de TI em Empresas
Camilo Almendra
 

What's hot (20)

Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Informática básica-01
Informática básica-01Informática básica-01
Informática básica-01
 
O compilador dev c++
O compilador dev c++O compilador dev c++
O compilador dev c++
 
Algoritmo e lógica de programação - Aula 1
Algoritmo e lógica de programação - Aula 1Algoritmo e lógica de programação - Aula 1
Algoritmo e lógica de programação - Aula 1
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Projeto jornal josete
Projeto jornal joseteProjeto jornal josete
Projeto jornal josete
 
Protocolo de comunicação apresentação
Protocolo de comunicação apresentação Protocolo de comunicação apresentação
Protocolo de comunicação apresentação
 
Motores de Busca
Motores de BuscaMotores de Busca
Motores de Busca
 
Servidor web
Servidor webServidor web
Servidor web
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Gestão de Projetos de TI em Empresas
Gestão de Projetos de TI em EmpresasGestão de Projetos de TI em Empresas
Gestão de Projetos de TI em Empresas
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
 
Gestão de projetos baseada no estudo de casos
Gestão de projetos baseada no estudo de casosGestão de projetos baseada no estudo de casos
Gestão de projetos baseada no estudo de casos
 
Algoritmos - Vetores
Algoritmos - VetoresAlgoritmos - Vetores
Algoritmos - Vetores
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de Software
 
Aula 03
Aula 03Aula 03
Aula 03
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 

Viewers also liked

Viewers also liked (9)

Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Programacao funcional
Programacao funcionalProgramacao funcional
Programacao funcional
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
 
TDC 2014 POA: Programacao funcional Por que Importa?
TDC 2014 POA: Programacao funcional Por que Importa?TDC 2014 POA: Programacao funcional Por que Importa?
TDC 2014 POA: Programacao funcional Por que Importa?
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
 
Exercícios de relacionamento 2012
Exercícios de relacionamento 2012Exercícios de relacionamento 2012
Exercícios de relacionamento 2012
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Como especificar requisitos em metodologias ágeis?
Como especificar requisitos em metodologias ágeis?Como especificar requisitos em metodologias ágeis?
Como especificar requisitos em metodologias ágeis?
 

Similar to Introdução Programação Funcional

Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
Sérgio Souza Costa
 

Similar to Introdução Programação Funcional (20)

Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Oz
OzOz
Oz
 
Haskell
HaskellHaskell
Haskell
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcional
 
Functional Programming - Scala
Functional Programming - ScalaFunctional Programming - Scala
Functional Programming - Scala
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
Funções em C
Funções em CFunções em C
Funções em C
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadas
 
Programacao funcional dojo
Programacao funcional dojoProgramacao funcional dojo
Programacao funcional dojo
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para Testers
 

Introdução Programação Funcional

  • 2. Quem sou ?! Natan J. Mai Estudante de Ciência da Computação, 7º semestre na UFFS. @NatanJMai - natanjmai.github.io/
  • 3. Nível: Iniciante Linguagem: Haskell Conteúdo ◦ O que é e de onde vem. ◦ Diferenças entre paradigmas. ◦ Algumas características. ◦ Exemplos ◦ Quem usa. INFO
  • 4. 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
  • 5. O QUE É ? O começo :) 1
  • 6. 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.
  • 7. 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.
  • 8. O QUE É? Paradigma Funcional # Atividade 01 $ Criar arquivo atividade01.hs -- code. $ ghci $ :load atividade01.hs $ fx
  • 9. 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.
  • 10. DIFERENTES PARADIGMAS Não, linguagens não são sempre iguais. 2
  • 11. 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?
  • 12. PARADIGMAS ◦ Alguns principais: - Funcional - Imperativo - Lógico - Orientado a Objetos
  • 13. 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.
  • 14. 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.
  • 15. PARADIGMAS ◦ Exemplos de linguagens: - Funcional - Haskell, OCaml, Erlang etc. - Imperativo - C, Java, PHP, etc. - Lógico - Prolog.
  • 16. 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.
  • 17. LAZY EVALUATION Avaliação preguiçosa é a forma em que as linguagens funcionais controlam as avaliações necessárias.
  • 19. 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.
  • 20. LAZY EVALUATION Exemplo de lazy evaluation: # Atividade 02 Obter os três primeiros números da lista começando no número 1. $ Abrir arquivo atividade01.hs Comando take.
  • 21. LAZY EVALUATION Exemplo de lazy evaluation: # Atividade 03 Obter a primeira tupla do exercício (01), do x + y = 6. $ Abrir arquivo atividade01.hs Ajustar função anterior.
  • 22. 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?”
  • 23. 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.
  • 24. 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.”
  • 25. FUNÇÕES DE ALTA ORDEM Funçõ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]
  • 26. 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
  • 27. 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 04 Criar a nossa própria função map.
  • 28. COMPREENSÃO DE LISTAS Listas desempenham um papel importante em diversas linguagens. $ [ x | x <- [1..10], x ^ 2 == 9] [ ]
  • 29. 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
  • 30. 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] ...
  • 31. COMPREENSÃO DE LISTAS ◦ Se vermos listas como uma centopéia, poderíamos representá-lo assim: HeadLast Tail
  • 32. 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 ->
  • 33. 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 ->
  • 34. COMPREENSÃO DE LISTAS # Atividade 05.2 - Somar todos esses valores de b. - Dica > “Soma” em Inglês :) Resultado ->
  • 35. COMPREENSÃO DE LISTAS # Atividade 06 - Soma dos quadrados dos 10 primeiros números > 2. Dicas > “Soma” em Inglês :) > “take 10” > “[ .. | .. ]” Resultado ->
  • 36. 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 ->
  • 37. COMPREENSÃO DE LISTAS # Atividade 08 Soma 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 ->
  • 38. 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.
  • 39. 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.
  • 40. 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).
  • 41. 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.
  • 42. ESTADOS IMUTÁVEIS Sem essa de variáveis. Sem essa de mudança de estados. Sem essa de novas atribuições.
  • 43. ESTADOS IMUTÁVEIS Exemplo: $ p = sum [2, 3, 4, 5] Um prêmio para o primeiro que conseguir fazer funcionar: $ p = p - 1
  • 44. 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.
  • 45. 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.
  • 46. QUEM USA? Algumas das principais empresas e produtos que utilizam programação funcional. ?
  • 47. QUEM USA. ◦ Haskell - Facebook, - Twitter, - Intel, - Microsoft, - NVIDIA https://wiki.haskell.org/Haskell_in_industry
  • 48. QUEM USA. ◦ Scala - LinkedIn, - Twitter, - Xerox, - Foursquare, - Sony http://www.scala-lang.org/old/node/1658
  • 49. QUEM USA. ◦ Erlang - Facebook, - Whatsapp, http://www.erlang.org/faq/introduction.html
  • 50. “ Uma linguagem que não afeta a maneira que você pensa sobre programação, não vale a pena ser aprendida. Alan Perlis
  • 51. NATAN - Todos os códigos estão em github.com/NatanJMai - Slides em slideshare.net/natanmai9 - Dúvidas/Sugestões natan.mai@hotmail.com
  • 52. Obrigado! Natan J. Mai Estudante de Ciência da Computação, 7º semestre na UFFS. @NatanJMai - natanjmai.github.io/
  • 53. 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.
  • 54. 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
  • 55. 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: