SlideShare uma empresa Scribd logo
Programação Funcional
em Haskell
5a Reunião —Módulos, Função de Ordem Superior,
Desafio: cifra de césar
Conteúdo e objetivos
 Introdução à programação funcional usando Haskell
 Objetivos de aprendizagem
 Importando Módulos;
 Fundamentos sobre funções de ordem superior;
 Seção desafio : cifra de césar em haskell;
Cadeias em compreensão
Como as cadeias são listas, também podemos usar notação
em compreensão com cadeias de carateres.
Exemplo: contar letras minúsculas.
minusculas :: String -> Int
minusculas txt = length [c | c<-txt, c>='a' && c<='z']
Processamento de listas e de
carateres
Muitas funções especializadas estão pré-definidas em
módulos.
Para utilizar um módulo devemos importar as suas definições.
Processamento de listas e de
carateres: (cont.)
Exemplo: o módulo Data.Char define operações sobre
caracteres.
import Data.Char
minusculas :: String -> Int
minusculas cs = length [c | c<-cs, isLower c]
-- isLower :: Char -> Bool
-- testar se um carater é uma letra minúscula
Processamento de listas e de
carateres: (cont.)
Um outro exemplo: converter cadeias de carateres em
maiúsculas.
import Data.Char
stringUpper :: String -> String
stringUpper cs = [toUpper c | c<-cs]
-- toUpper :: Char -> Char
-- converter letras em maiúsculas
Mais informação
Podemos usar o GHCi para listar todos os nomes definidos
num módulo:
Prelude> import Data.Char
Prelude Data.Char> :browse
Seção desafio: O módulo
Data.Char
Vamos usar algumas funções sobre caracteres definidas no
módulo Data.Char, .:
ord :: Char -> Int — código numérico dum caracter
chr :: Int -> Char — caracter dum código numérico
Para usar este módulo, colocamos a seguinte declaração no
programa:
import Data.Char
Função de Ordem Superior
Uma função é de ordem superior se tem um argumento que é
uma função ou um resultado que é uma função.
Exemplo: o primeiro argumento de twice é uma função.
twice :: (a -> a) -> a -> a
twice f x = f (f x)
A função map
A função map aplica uma função a cada elemento duma lista.
map :: (a -> b) -> [a] -> [b]
Exemplos:
> map (+1) [1,3,5,7]
[2,4,6,8]
> map isLower "Hello!"
[False,True,True,True,True,False]
A função filter
A função filter seleciona os elementos duma lista que
satisfazem um predicado (isto é, uma função cujo resultado é
um valor boleano).
filter :: (a -> Bool) -> [a] -> [a]
Exemplos:
> filter even [1..10]
[2,4,6,8,10]
> filter isLower "Hello, world!"
"elloworld"
Funções takeWhile e
dropWhile
takeWhile seleciona o maior prefixo duma lista cujos elementos
verificam um predicado.
dropWhile remove o maior prefixo cujos elementos verificam
um predicado.
As duas funções têm o mesmo tipo:
takeWhile, dropWhile :: (a -> Bool) -> [a] -> [a]
Funções takeWhile e
dropWhile (cont.)
Exemplos:
> takeWhile isLetter "Hello, world!"
"Hello“
> dropWhile isLetter "Hello, world!"
", world!"
> takeWhile (n -> n*n<10) [1..5]
[1,2,3]
> dropWhile (n -> n*n<10) [1..5]
[4,5]
As funções all e any
all verifica se um predicado é verdadeiro para todos os
elementos duma lista.
any verifica se um predicado é verdadeiro para algum
elemento duma lista.
As duas funções têm o mesmo tipo:
all, any :: (a -> Bool) -> [a] -> Boll
As funções all e any (cont.)
Exemplos:
> all even [2,4,6,8]
True
> any odd [2,4,6,8]
False
> all isLower "Hello, world!"
False
> any isLower "Hello, world!"
True
As funções all e any (cont.)
Podemos definir all e any usando map, and e or:
all p xs = and (map p xs)
any p xs = or (map p xs)
A função fold r l
A função foldr transforma uma lista usando uma operação
associada à direita (“fold right”):
foldr () v [x1; x2; : : : ; xn] = x1 (x2 (: : : (xn v) : : :))
Existe outra função foldl que transforma uma lista usando uma
operação associada à esquerda (“fold left”):
foldl () v [x1; x2; : : : ; xn] = ((: : : ((v x1) x2) : : :) xn)
A função foldr (cont.)
sum = foldr (+) 0
product = foldr (*) 1
and = foldr (&&) True
or = foldr (||) False
length = foldr (x n->n+1) 0
A função foldr (cont.)
sum [1,2,3,4]
=
foldr (+) 0 [1,2,3,4]
=
foldr (+) 0 (1:(2:(3:(4:[]))))
=
1+(2+(3+(4+0)))
=
10
A função foldr (cont.)
Outro exemplo:
product [1,2,3,4]
=
foldr (*) 1 [1,2,3,4]
=
foldr (*) 1 (1:(2:(3:(4:[]))))
=
1*(2*(3*(4*1)))
=
24
A função foldl
Se f for associativa e z elemento neutro, então foldr f z e
foldl f z dão o mesmo resultado.
sum = foldl (+) 0 sum = foldr (+) 0
sum [1,2,3,4] sum [1,2,3,4]
= =
foldl (+) 0 [1,2,3,4] foldr (+) 0 [1,2,3,4]
= =
(((0+1)+2)+3)+4 1+(2+(3+(4+0)))
= =
10 10
Outras funções de ordem
superior
A função (.) é a composição de duas funções.
(.) :: (b -> c) -> (a -> b) -> a -> c
f . g = x -> f (g x)
Exemplo
par :: Int -> Bool
par x = x`mod`2 == 0
impar :: Int -> Bool
impar = not . Par
Outras funções de ordem
superior
A composição permite muitas vezes simplificar definições
embricadas, omitido os parêntesis e o argumento.
Exemplo:
f xs = sum (map (^2) (filter par xs))
é equivalente a
f = sum . map (^2) . filter par
Seção desafio: a cifra de césar
• Um dos métodos mais simples para codificar um texto.
• Cada letra é substituída pela que dita k posições no
alfabeto.
• Quando ultrapassa a letra ’z’, volta à letra ’a’.
• Utilizada pelo imperador Júlio César (100 AC–44 AC).
Seção desafio: a cifra de césar
Exemplo: para k = 3, a substituição é:
a b c d e f g h i j k l m n o p q r s t u v w x y z
d e f g h i j k l m n o p q r s t u v w x y z a b c
Logo, “ataque” é codificado como “dwdtxh”.
“Elizete” é codificado como “Eolchhw”.
“Davi Sena ” é codificado como “Gdyl vhqd”.
“Darlan ” é codificado como “Gduodq”.
Seção desafio: a cifra de césar
Fazer em haskell um programa que simule a cifra de césar !
Resolução Próximo Encontro.
Bibliografia
Haskell - Uma abordagem prática. Cláudio César de Sá e
Márcio Ferreira da Silva. Novatec, 2006.
http://en.wikipedia.org/wiki/Fold_(higher-order_function).
Agradecimentos
Ao Prof°- Ricardo Reis e a todos os participantes do projeto
haskell ufc.

Mais conteúdo relacionado

Mais procurados

Polinomios aula
Polinomios aulaPolinomios aula
Polinomios aula
ELIZEU GODOY JR
 
05.第五章用Matlab计算积分
05.第五章用Matlab计算积分05.第五章用Matlab计算积分
05.第五章用Matlab计算积分Xin Zheng
 
20 polar equations and graphs
20 polar equations and graphs20 polar equations and graphs
20 polar equations and graphs
math267
 
Curso Adabas
Curso AdabasCurso Adabas
Curso Adabas
neigao
 
Linking the world with Python and Semantics
Linking the world with Python and SemanticsLinking the world with Python and Semantics
Linking the world with Python and Semantics
Tatiana Al-Chueyr
 
Intalgebra lna
Intalgebra lnaIntalgebra lna
Intalgebra lna
RJS8230
 
Algebra - Livro texto II (UNIP/Matemática) 2018
Algebra - Livro texto II (UNIP/Matemática) 2018Algebra - Livro texto II (UNIP/Matemática) 2018
Algebra - Livro texto II (UNIP/Matemática) 2018
Antonio Marcos
 
Algebra - Livro texto IV (UNIP/Matemática) 2018
Algebra - Livro texto IV (UNIP/Matemática) 2018Algebra - Livro texto IV (UNIP/Matemática) 2018
Algebra - Livro texto IV (UNIP/Matemática) 2018
Antonio Marcos
 
Converting Scikit-Learn to PMML
Converting Scikit-Learn to PMMLConverting Scikit-Learn to PMML
Converting Scikit-Learn to PMML
Villu Ruusmann
 
25 surface area
25 surface area25 surface area
25 surface areamath267
 
Função de Distribuição Acumulada
Função de Distribuição AcumuladaFunção de Distribuição Acumulada
Função de Distribuição Acumulada
Anselmo Alves de Sousa
 
Limites
LimitesLimites
Alg2 notas de aula 01
Alg2 notas de aula 01Alg2 notas de aula 01
Alg2 notas de aula 01
gpressato
 
An Alternative Proof of the chain rule and definition of differentiability fo...
An Alternative Proof of the chain rule and definition of differentiability fo...An Alternative Proof of the chain rule and definition of differentiability fo...
An Alternative Proof of the chain rule and definition of differentiability fo...
Raymond Jensen
 
Função logarítmica definição e propeiedades
Função logarítmica   definição e propeiedadesFunção logarítmica   definição e propeiedades
Função logarítmica definição e propeiedadesPéricles Penuel
 
Teoria dos Conjuntos
Teoria dos ConjuntosTeoria dos Conjuntos
Teoria dos Conjuntos
Chromus Master
 
Aula Sobre Coordenadas Cartesianas
Aula Sobre Coordenadas CartesianasAula Sobre Coordenadas Cartesianas
Aula Sobre Coordenadas CartesianasAntonio Carneiro
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidosHAROLDO MIRANDA DA COSTA JR
 
Equações algébricas
Equações algébricas   Equações algébricas
Equações algébricas
ELIZEU GODOY JR
 
Ejercicios reticulados alirio marquez
Ejercicios reticulados alirio marquezEjercicios reticulados alirio marquez
Ejercicios reticulados alirio marquez
alirio98
 

Mais procurados (20)

Polinomios aula
Polinomios aulaPolinomios aula
Polinomios aula
 
05.第五章用Matlab计算积分
05.第五章用Matlab计算积分05.第五章用Matlab计算积分
05.第五章用Matlab计算积分
 
20 polar equations and graphs
20 polar equations and graphs20 polar equations and graphs
20 polar equations and graphs
 
Curso Adabas
Curso AdabasCurso Adabas
Curso Adabas
 
Linking the world with Python and Semantics
Linking the world with Python and SemanticsLinking the world with Python and Semantics
Linking the world with Python and Semantics
 
Intalgebra lna
Intalgebra lnaIntalgebra lna
Intalgebra lna
 
Algebra - Livro texto II (UNIP/Matemática) 2018
Algebra - Livro texto II (UNIP/Matemática) 2018Algebra - Livro texto II (UNIP/Matemática) 2018
Algebra - Livro texto II (UNIP/Matemática) 2018
 
Algebra - Livro texto IV (UNIP/Matemática) 2018
Algebra - Livro texto IV (UNIP/Matemática) 2018Algebra - Livro texto IV (UNIP/Matemática) 2018
Algebra - Livro texto IV (UNIP/Matemática) 2018
 
Converting Scikit-Learn to PMML
Converting Scikit-Learn to PMMLConverting Scikit-Learn to PMML
Converting Scikit-Learn to PMML
 
25 surface area
25 surface area25 surface area
25 surface area
 
Função de Distribuição Acumulada
Função de Distribuição AcumuladaFunção de Distribuição Acumulada
Função de Distribuição Acumulada
 
Limites
LimitesLimites
Limites
 
Alg2 notas de aula 01
Alg2 notas de aula 01Alg2 notas de aula 01
Alg2 notas de aula 01
 
An Alternative Proof of the chain rule and definition of differentiability fo...
An Alternative Proof of the chain rule and definition of differentiability fo...An Alternative Proof of the chain rule and definition of differentiability fo...
An Alternative Proof of the chain rule and definition of differentiability fo...
 
Função logarítmica definição e propeiedades
Função logarítmica   definição e propeiedadesFunção logarítmica   definição e propeiedades
Função logarítmica definição e propeiedades
 
Teoria dos Conjuntos
Teoria dos ConjuntosTeoria dos Conjuntos
Teoria dos Conjuntos
 
Aula Sobre Coordenadas Cartesianas
Aula Sobre Coordenadas CartesianasAula Sobre Coordenadas Cartesianas
Aula Sobre Coordenadas Cartesianas
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos
 
Equações algébricas
Equações algébricas   Equações algébricas
Equações algébricas
 
Ejercicios reticulados alirio marquez
Ejercicios reticulados alirio marquezEjercicios reticulados alirio marquez
Ejercicios reticulados alirio marquez
 

Semelhante a Haskell aula5 f.ordem-sup_modulos-cifra_cesar

Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
Arthur Xavier
 
07-lambda.pdf
07-lambda.pdf07-lambda.pdf
07-lambda.pdf
Rodrigo Wanzeler
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
Diogo Gomes
 
Resolução lista2
Resolução lista2Resolução lista2
Resolução lista2
CRISLANIO MACEDO
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)
Felipe Meganha
 
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
Gustavo Fernandes Dos Santos
 
Funçao quadratica-revisao
Funçao quadratica-revisaoFunçao quadratica-revisao
Funçao quadratica-revisaoMagda Damião
 
Funçao quadratica-revisao 2
Funçao quadratica-revisao 2Funçao quadratica-revisao 2
Funçao quadratica-revisao 2Magda Damião
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Estruturas de dados em Python
Estruturas de dados em PythonEstruturas de dados em Python
Estruturas de dados em Python
Ricardo Paiva
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Filipe Chagas Ferraz
 
áLgebra i
áLgebra iáLgebra i
áLgebra i
Renan Silva
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiais
Josh Santos
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
Tiago Vieira
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?
pmatiello
 
Utilizando o Winplot como recurso ao ensino da matemática
Utilizando o Winplot como recurso ao ensino da matemáticaUtilizando o Winplot como recurso ao ensino da matemática
Utilizando o Winplot como recurso ao ensino da matemática
Carolina Farhat
 
Apostila3funes 111212025004-phpapp01
Apostila3funes 111212025004-phpapp01Apostila3funes 111212025004-phpapp01
Apostila3funes 111212025004-phpapp01Romilda Dores Brito
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
Anderson Sanches
 

Semelhante a Haskell aula5 f.ordem-sup_modulos-cifra_cesar (20)

Scheme
SchemeScheme
Scheme
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
 
07-lambda.pdf
07-lambda.pdf07-lambda.pdf
07-lambda.pdf
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Resolução lista2
Resolução lista2Resolução lista2
Resolução lista2
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)
 
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
 
Funçao quadratica-revisao
Funçao quadratica-revisaoFunçao quadratica-revisao
Funçao quadratica-revisao
 
Funçao quadratica-revisao 2
Funçao quadratica-revisao 2Funçao quadratica-revisao 2
Funçao quadratica-revisao 2
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Estruturas de dados em Python
Estruturas de dados em PythonEstruturas de dados em Python
Estruturas de dados em Python
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
 
áLgebra i
áLgebra iáLgebra i
áLgebra i
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiais
 
Função do 2º Grau.
Função do 2º Grau.Função do 2º Grau.
Função do 2º Grau.
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?
 
Utilizando o Winplot como recurso ao ensino da matemática
Utilizando o Winplot como recurso ao ensino da matemáticaUtilizando o Winplot como recurso ao ensino da matemática
Utilizando o Winplot como recurso ao ensino da matemática
 
Apostila3funes 111212025004-phpapp01
Apostila3funes 111212025004-phpapp01Apostila3funes 111212025004-phpapp01
Apostila3funes 111212025004-phpapp01
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 

Mais de CRISLANIO MACEDO

Record Deduplication and Record Linkage
Record Deduplication and  Record LinkageRecord Deduplication and  Record Linkage
Record Deduplication and Record Linkage
CRISLANIO MACEDO
 
Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019
CRISLANIO MACEDO
 
Pitch Medbloc
Pitch MedblocPitch Medbloc
Pitch Medbloc
CRISLANIO MACEDO
 
Search based gravitational algorithm
Search based gravitational algorithmSearch based gravitational algorithm
Search based gravitational algorithm
CRISLANIO MACEDO
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
CRISLANIO MACEDO
 
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
CRISLANIO MACEDO
 
JGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast CommunicationJGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast Communication
CRISLANIO MACEDO
 
Inteligência artificial algumas técnicas aplicadas em jogos
Inteligência artificial  algumas técnicas aplicadas em jogosInteligência artificial  algumas técnicas aplicadas em jogos
Inteligência artificial algumas técnicas aplicadas em jogos
CRISLANIO MACEDO
 
Artigo ia traps, invariants, and dead-ends
Artigo ia   traps, invariants, and dead-endsArtigo ia   traps, invariants, and dead-ends
Artigo ia traps, invariants, and dead-ends
CRISLANIO MACEDO
 
Análise dos dados abertos do governo federal
Análise dos dados abertos do governo federalAnálise dos dados abertos do governo federal
Análise dos dados abertos do governo federal
CRISLANIO MACEDO
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
CRISLANIO MACEDO
 
Sistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de AvaliaçãoSistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de Avaliação
CRISLANIO MACEDO
 
Sistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de SínteseSistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de Síntese
CRISLANIO MACEDO
 
Resoluçãohaskell2
Resoluçãohaskell2Resoluçãohaskell2
Resoluçãohaskell2
CRISLANIO MACEDO
 
Haskell ufc quixadalista2
Haskell ufc quixadalista2Haskell ufc quixadalista2
Haskell ufc quixadalista2
CRISLANIO MACEDO
 
Haskell ufc quixadalista1
Haskell ufc quixadalista1Haskell ufc quixadalista1
Haskell ufc quixadalista1
CRISLANIO MACEDO
 
Haskell motivação
Haskell motivaçãoHaskell motivação
Haskell motivação
CRISLANIO MACEDO
 
Haskell motivaçãoaula2
Haskell motivaçãoaula2Haskell motivaçãoaula2
Haskell motivaçãoaula2
CRISLANIO MACEDO
 
Haskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivosHaskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivos
CRISLANIO MACEDO
 
Haskell aula3 listas
Haskell aula3 listasHaskell aula3 listas
Haskell aula3 listas
CRISLANIO MACEDO
 

Mais de CRISLANIO MACEDO (20)

Record Deduplication and Record Linkage
Record Deduplication and  Record LinkageRecord Deduplication and  Record Linkage
Record Deduplication and Record Linkage
 
Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019
 
Pitch Medbloc
Pitch MedblocPitch Medbloc
Pitch Medbloc
 
Search based gravitational algorithm
Search based gravitational algorithmSearch based gravitational algorithm
Search based gravitational algorithm
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
 
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
 
JGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast CommunicationJGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast Communication
 
Inteligência artificial algumas técnicas aplicadas em jogos
Inteligência artificial  algumas técnicas aplicadas em jogosInteligência artificial  algumas técnicas aplicadas em jogos
Inteligência artificial algumas técnicas aplicadas em jogos
 
Artigo ia traps, invariants, and dead-ends
Artigo ia   traps, invariants, and dead-endsArtigo ia   traps, invariants, and dead-ends
Artigo ia traps, invariants, and dead-ends
 
Análise dos dados abertos do governo federal
Análise dos dados abertos do governo federalAnálise dos dados abertos do governo federal
Análise dos dados abertos do governo federal
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
 
Sistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de AvaliaçãoSistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de Avaliação
 
Sistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de SínteseSistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de Síntese
 
Resoluçãohaskell2
Resoluçãohaskell2Resoluçãohaskell2
Resoluçãohaskell2
 
Haskell ufc quixadalista2
Haskell ufc quixadalista2Haskell ufc quixadalista2
Haskell ufc quixadalista2
 
Haskell ufc quixadalista1
Haskell ufc quixadalista1Haskell ufc quixadalista1
Haskell ufc quixadalista1
 
Haskell motivação
Haskell motivaçãoHaskell motivação
Haskell motivação
 
Haskell motivaçãoaula2
Haskell motivaçãoaula2Haskell motivaçãoaula2
Haskell motivaçãoaula2
 
Haskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivosHaskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivos
 
Haskell aula3 listas
Haskell aula3 listasHaskell aula3 listas
Haskell aula3 listas
 

Haskell aula5 f.ordem-sup_modulos-cifra_cesar

  • 1. Programação Funcional em Haskell 5a Reunião —Módulos, Função de Ordem Superior, Desafio: cifra de césar
  • 2. Conteúdo e objetivos  Introdução à programação funcional usando Haskell  Objetivos de aprendizagem  Importando Módulos;  Fundamentos sobre funções de ordem superior;  Seção desafio : cifra de césar em haskell;
  • 3. Cadeias em compreensão Como as cadeias são listas, também podemos usar notação em compreensão com cadeias de carateres. Exemplo: contar letras minúsculas. minusculas :: String -> Int minusculas txt = length [c | c<-txt, c>='a' && c<='z']
  • 4. Processamento de listas e de carateres Muitas funções especializadas estão pré-definidas em módulos. Para utilizar um módulo devemos importar as suas definições.
  • 5. Processamento de listas e de carateres: (cont.) Exemplo: o módulo Data.Char define operações sobre caracteres. import Data.Char minusculas :: String -> Int minusculas cs = length [c | c<-cs, isLower c] -- isLower :: Char -> Bool -- testar se um carater é uma letra minúscula
  • 6. Processamento de listas e de carateres: (cont.) Um outro exemplo: converter cadeias de carateres em maiúsculas. import Data.Char stringUpper :: String -> String stringUpper cs = [toUpper c | c<-cs] -- toUpper :: Char -> Char -- converter letras em maiúsculas
  • 7. Mais informação Podemos usar o GHCi para listar todos os nomes definidos num módulo: Prelude> import Data.Char Prelude Data.Char> :browse
  • 8. Seção desafio: O módulo Data.Char Vamos usar algumas funções sobre caracteres definidas no módulo Data.Char, .: ord :: Char -> Int — código numérico dum caracter chr :: Int -> Char — caracter dum código numérico Para usar este módulo, colocamos a seguinte declaração no programa: import Data.Char
  • 9. Função de Ordem Superior Uma função é de ordem superior se tem um argumento que é uma função ou um resultado que é uma função. Exemplo: o primeiro argumento de twice é uma função. twice :: (a -> a) -> a -> a twice f x = f (f x)
  • 10. A função map A função map aplica uma função a cada elemento duma lista. map :: (a -> b) -> [a] -> [b] Exemplos: > map (+1) [1,3,5,7] [2,4,6,8] > map isLower "Hello!" [False,True,True,True,True,False]
  • 11. A função filter A função filter seleciona os elementos duma lista que satisfazem um predicado (isto é, uma função cujo resultado é um valor boleano). filter :: (a -> Bool) -> [a] -> [a] Exemplos: > filter even [1..10] [2,4,6,8,10] > filter isLower "Hello, world!" "elloworld"
  • 12. Funções takeWhile e dropWhile takeWhile seleciona o maior prefixo duma lista cujos elementos verificam um predicado. dropWhile remove o maior prefixo cujos elementos verificam um predicado. As duas funções têm o mesmo tipo: takeWhile, dropWhile :: (a -> Bool) -> [a] -> [a]
  • 13. Funções takeWhile e dropWhile (cont.) Exemplos: > takeWhile isLetter "Hello, world!" "Hello“ > dropWhile isLetter "Hello, world!" ", world!" > takeWhile (n -> n*n<10) [1..5] [1,2,3] > dropWhile (n -> n*n<10) [1..5] [4,5]
  • 14. As funções all e any all verifica se um predicado é verdadeiro para todos os elementos duma lista. any verifica se um predicado é verdadeiro para algum elemento duma lista. As duas funções têm o mesmo tipo: all, any :: (a -> Bool) -> [a] -> Boll
  • 15. As funções all e any (cont.) Exemplos: > all even [2,4,6,8] True > any odd [2,4,6,8] False > all isLower "Hello, world!" False > any isLower "Hello, world!" True
  • 16. As funções all e any (cont.) Podemos definir all e any usando map, and e or: all p xs = and (map p xs) any p xs = or (map p xs)
  • 17. A função fold r l A função foldr transforma uma lista usando uma operação associada à direita (“fold right”): foldr () v [x1; x2; : : : ; xn] = x1 (x2 (: : : (xn v) : : :)) Existe outra função foldl que transforma uma lista usando uma operação associada à esquerda (“fold left”): foldl () v [x1; x2; : : : ; xn] = ((: : : ((v x1) x2) : : :) xn)
  • 18. A função foldr (cont.) sum = foldr (+) 0 product = foldr (*) 1 and = foldr (&&) True or = foldr (||) False length = foldr (x n->n+1) 0
  • 19. A função foldr (cont.) sum [1,2,3,4] = foldr (+) 0 [1,2,3,4] = foldr (+) 0 (1:(2:(3:(4:[])))) = 1+(2+(3+(4+0))) = 10
  • 20. A função foldr (cont.) Outro exemplo: product [1,2,3,4] = foldr (*) 1 [1,2,3,4] = foldr (*) 1 (1:(2:(3:(4:[])))) = 1*(2*(3*(4*1))) = 24
  • 21. A função foldl Se f for associativa e z elemento neutro, então foldr f z e foldl f z dão o mesmo resultado. sum = foldl (+) 0 sum = foldr (+) 0 sum [1,2,3,4] sum [1,2,3,4] = = foldl (+) 0 [1,2,3,4] foldr (+) 0 [1,2,3,4] = = (((0+1)+2)+3)+4 1+(2+(3+(4+0))) = = 10 10
  • 22. Outras funções de ordem superior A função (.) é a composição de duas funções. (.) :: (b -> c) -> (a -> b) -> a -> c f . g = x -> f (g x) Exemplo par :: Int -> Bool par x = x`mod`2 == 0 impar :: Int -> Bool impar = not . Par
  • 23. Outras funções de ordem superior A composição permite muitas vezes simplificar definições embricadas, omitido os parêntesis e o argumento. Exemplo: f xs = sum (map (^2) (filter par xs)) é equivalente a f = sum . map (^2) . filter par
  • 24. Seção desafio: a cifra de césar • Um dos métodos mais simples para codificar um texto. • Cada letra é substituída pela que dita k posições no alfabeto. • Quando ultrapassa a letra ’z’, volta à letra ’a’. • Utilizada pelo imperador Júlio César (100 AC–44 AC).
  • 25. Seção desafio: a cifra de césar Exemplo: para k = 3, a substituição é: a b c d e f g h i j k l m n o p q r s t u v w x y z d e f g h i j k l m n o p q r s t u v w x y z a b c Logo, “ataque” é codificado como “dwdtxh”. “Elizete” é codificado como “Eolchhw”. “Davi Sena ” é codificado como “Gdyl vhqd”. “Darlan ” é codificado como “Gduodq”.
  • 26. Seção desafio: a cifra de césar Fazer em haskell um programa que simule a cifra de césar ! Resolução Próximo Encontro.
  • 27. Bibliografia Haskell - Uma abordagem prática. Cláudio César de Sá e Márcio Ferreira da Silva. Novatec, 2006. http://en.wikipedia.org/wiki/Fold_(higher-order_function).
  • 28. Agradecimentos Ao Prof°- Ricardo Reis e a todos os participantes do projeto haskell ufc.