SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Mini-Curso de Haskell - SEMAC 2013/1
Marcelo Garlet Millani
Universidade Federal do Rio Grande do Sul
Instituto de Informática
Grupo PET Computação
22 de maio de 2013
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
1 Básico de OpenGl
2 Qualied Types
Denindo Classes
Algumas Classes Úteis
3 Functor e Monad
4 Handles
5 Referências
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
OpenGL
• OpenGl é uma biblioteca gráca
• Permite aproveitar a GPU para desenhos
• Capaz de trabalhar em 3D, mas usaremos apenas 2D
• GHC possui bindings para Haskell
• Módulo Graphics.Rendering.OpenGL
• Pacote libghc-opengl-dev no Linux (Debian)
• Usaremos a GLUT (Graphics.UI.GLUT) para a janela
• Pacote libghc-glut-dev no Linux (Debian)
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Inicialização
getArgsAndInitialize Inicializa a GLUT
createWindow Cria uma janela gráca
displayCallback Determina a função que será usada para
desenhar
mainLoop Inicia o processo de desenho
Exemplo
1 main = do
2 g e t A r g s A n d I n i t i a l i z e
3 createWindow  Hello World
4 d i s p l a y C a l l b a c k $= d i s p l a y myPoints
5 mainLoop
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Desenho
clear Limpa um buer
renderPrimitive Desenha uma primitiva do OpenGL
ush Finaliza o desenho
vertex Especica um vértice do polígono que está sendo
desenhado
Exemplo
1 d i s p l a y p = do
2 c l e a r [ ColorBuffer ]
3 r e n d e r P r i m i t i v e LineLoop $ do
4 mapM_ (( x , y , z)−vertex$Vertex3 x y z ) p
5 f l u s h
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Exercício
Exercício
Faça um programa que desenhe o triângulo de Sierpinski.
• Composto por triângulos retângulos isósceles
• Divide-se em três regiões: direita, cima e centro
• Cada região será composta por um triângulo com a metade
do lado
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
1 Básico de OpenGl
2 Qualied Types
Denindo Classes
Algumas Classes Úteis
3 Functor e Monad
4 Handles
5 Referências
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Para que servem
• Uso de funções polimórcas
• Restringem os tipos para os quais a função está denida
Exemplo
Função de soma:
1 (+) : : Num a= a−a−a
Denida para qualquer a tal que a seja um membro de Num.
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Como usar
• Denimos como as funções da classe serão aplicadas para
um certo tipo de dado
• Em alguns casos, não é necessário denir todas as funções
• Por exemplo, basta denir igualdade (==) para se ter
diferença (/=)
Exemplo
1 instance Eq a = Eq ( Figure a ) where
2 C i r c l e r == C i r c l e s =
3 r == s
4 Rectangle w h == Rectangle a b =
5 w == a  h == b
6 _ == _ = False
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Derivação
• Algumas classes possuem suporte para derivação
• Usam uma implementação padrão para qualquer tipo de
dado
• Funciona somente com:
• Eq
• Ord
• Enum
• Bounded
• Show
• Read
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Derivação
Exemplo
1 data Quadrilatero a = Retangulo a a | Quadrado a
2 deriving (Show, Read,Eq, Ord)
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Denindo Classes
• Faremos uma classe para uniformizar o desenho de
primitivas
• Minimizaremos a inuência do OpenGL
• Ter os vértices é o suciente para desenhar algo
Funções
1 class Drawable d where
2 toVertex : : d − ( Float , Float) −
3 [ ( Float , Float ) ]
4 draw : : PrimitiveMode − d −
5 ( Float , Float) − IO ()
6 drawWire : : ( Float , Float) −
7 d − IO ()
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Conversões
• OpenGL usa o tipo GLoat
• Usaremos uma função para converter de Float para GLoat
• Essa função pode car fora da classe
Conversões
1 convertToGLfloat x = ( realToFrac x ) : : GLfloat
2 convertPoint (x , y ) =
3 vertex $ Vertex2 ( convertToGLfloat x )
4 ( convertToGLfloat y )
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Implementação
• Providenciaremos uma implementação padrão para draw e
drawWire
• Basta fornecer uma implementação para toVertex
Funções
1 draw mode f i g u r e point =
2 r e n d e r P r i m i t i v e mode $
3 mapM_ convertPoint ( toVertex f i g u r e point )
4
5 drawWire point f i g u r e =
6 draw LineLoop f i g u r e point
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Exercício
Exercício
Faça com que o tipo Figure seja um membro da classe
Drawable. Com isso, desenhe um fractal que seja um círculo
dentro de um quadrado dentro de um círculo dentro de um
quadrado ...
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Eq
Denição
1 class Eq a where
2 (==), (/=) : : a − a − Bool
3
4 x /= y = not ( x == y )
5 x == y = not ( x /= y )
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Ord
Denição
1 class (Eq a ) = Ord a where
2 compare : : a − a − Ordering
3 ( ) , (=), (=), () : : a − a − Bool
4 max, min : : a − a − a
5
6 compare x y | x == y = EQ
7 | x = y = LT
8 | otherwise = GT
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Ord (Continuação)
Denição
1 −− c l a s s ( Eq a ) = Ord a where
2 x = y = compare x y /= GT
3 x  y = compare x y == LT
4 x = y = compare x y /= LT
5 x  y = compare x y == GT
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Ord (Continuação)
Denição
1 −− c l a s s ( Eq a ) = Ord a where
2 max x y | x = y = y
3 | otherwise = x
4 min x y | x = y = x
5 | otherwise = y
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Exercício
Exercício
Estenda a denição de Figure para que ela faça parte da classe
Ord. Use a área de gura como critério.
• Para testar a sua denição, use a função sort e sortBy da
biblioteca Data.List
• sort :: Ord a = [a] - [a]
• sortBy :: (a - a - Ordering) - [a] - [a]
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
1 Básico de OpenGl
2 Qualied Types
Denindo Classes
Algumas Classes Úteis
3 Functor e Monad
4 Handles
5 Referências
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Functor
• Dene um meio de transformar tipos de dados
Classe
1 class Functor f where
2 fmap : : ( a − b) − f a − f b
• f é um construtor
Propriedades Esperadas
1 fmap id = id
2 fmap ( f . g) = fmap f . fmap g
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Exemplo
Exemplo
1 instance Functor [ ] where
2 fmap f [ ] = [ ]
3 fmap f (h : t l ) = f h : fmap f t l
• Comportamento igual ao da função map
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Monad
Denição
1 class Monad m where
2 (=) : : m a − ( a − m b) − m b −− b i n d
3 () : : m a − m b − m b −− s e q u e n c e
4 return : : a − m a
5 fail : : String − m a
6
7 m  k = m = _ − k
8 fail s = error s
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Sintaxe do
• Apenas açúcar sintático
• Na realidade, utiliza os operadores de mônadas
Regras
1 do e
2 − e
3 do e1 ; e2 ; . . . ; en
4 − e1  do e2 ; . . . ; e_n
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Monad
Regras
1 do pat − e1 ; e2 ; . . . ; en
2 −
3 let ok pat = do e2 ; . . . ; en
4 ok _ = fail  . . . 
5 in e1 = ok
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Monad
Regras
1 do let d e c l l i s t ; e2 ; . . . ; en
2 − let d e c l l i s t in do e2 ; . . . ; en
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
1 Básico de OpenGl
2 Qualied Types
Denindo Classes
Algumas Classes Úteis
3 Functor e Monad
4 Handles
5 Referências
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Handles
• Usados para abrir um arquivo para diversas modicações
• São mais ecientes do que funções como readFile ou
writeFile
• É necessário lembrar de fechar o arquivo
• Usa-se a biblioteca System.IO
Algumas Funções
1 openFile : : FilePath − IOMode − IO Handle
2 hClose : : Handle − IO ()
3 hPutStr : : Handle − String − IO ()
4 hGetChar : : Handle − IO Char
5 hGetLine : : Handle − IO String
6 hGetContents : : Handle − IO String
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Exercício
Exercício
Faça um programa que escreva diversas guras geométricas em
um arquivo (usando a classe Show) e depois leia essas guras
do arquivo (usando Read). Trate o arquivo com handles. Derive
as classes em vez de implementá-las.
• hGetContents é uma função de leitura lazy
• Para conveniência, fechem o arquivo de leitura no nal do
programa, em vez de no nal da leitura.
• Existem alternativas melhores, como tratar o nal do
arquivo
Mini-Curso
de Haskell -
SEMAC
2013/1
M. Millani
Básico de
OpenGl
Qualied
Types
Denindo
Classes
Algumas
Classes Úteis
Functor e
Monad
Handles
Referências
Referências
Hal Daumé III, Yet Another Haskell Tutorial
Hudak, Paul. The Haskell School of Expression
http:
//www.haskell.org/haskellwiki/OpenGLTutorial1
http://www.haskell.org/onlinereport

Más contenido relacionado

La actualidad más candente

Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação FuncionalNatan Mai
 
Lógica de Programação com Javascript - Aula #03
Lógica de Programação com Javascript - Aula #03Lógica de Programação com Javascript - Aula #03
Lógica de Programação com Javascript - Aula #03Ramon Kayo
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Helder da Rocha
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
Aula 02 operadores aritiméticos
Aula 02   operadores aritiméticosAula 02   operadores aritiméticos
Aula 02 operadores aritiméticosTácito Graça
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...Manuel Menezes de Sequeira
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: IntroduçãoWesley R. Bezerra
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...Manuel Menezes de Sequeira
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...Manuel Menezes de Sequeira
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareMarcio Junior Vieira
 

La actualidad más candente (20)

Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Lógica de Programação com Javascript - Aula #03
Lógica de Programação com Javascript - Aula #03Lógica de Programação com Javascript - Aula #03
Lógica de Programação com Javascript - Aula #03
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014
 
Programacao funcional
Programacao funcionalProgramacao funcional
Programacao funcional
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
Aula 02 operadores aritiméticos
Aula 02   operadores aritiméticosAula 02   operadores aritiméticos
Aula 02 operadores aritiméticos
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Pged 06
Pged 06Pged 06
Pged 06
 
Java Básico
Java BásicoJava Básico
Java Básico
 
Scjp - Assignments
Scjp - AssignmentsScjp - Assignments
Scjp - Assignments
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: Introdução
 
Aula01
Aula01Aula01
Aula01
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshare
 

Destacado

Algoritmo e lógica de programação
Algoritmo e lógica de programaçãoAlgoritmo e lógica de programação
Algoritmo e lógica de programaçãojose alisson
 
Como Estudar Sozinho em Casa
Como Estudar Sozinho em CasaComo Estudar Sozinho em Casa
Como Estudar Sozinho em CasaRichard Reinaldo
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellSérgio Souza Costa
 
Ubuntu Touch - O Linux de bolso.
Ubuntu Touch - O Linux de bolso.Ubuntu Touch - O Linux de bolso.
Ubuntu Touch - O Linux de bolso.Alessandro Faria
 
Autômatos Celulares
Autômatos CelularesAutômatos Celulares
Autômatos CelularesMarcelo Ramos
 
Comunicação e Empregabilidade
Comunicação e EmpregabilidadeComunicação e Empregabilidade
Comunicação e Empregabilidademairamed
 
Algoritmo de euclides
Algoritmo de euclidesAlgoritmo de euclides
Algoritmo de euclideslizethkathe
 
08 linguagens recursivamente enumeraveis e sensiveis ao contexto
08   linguagens recursivamente enumeraveis e sensiveis ao contexto08   linguagens recursivamente enumeraveis e sensiveis ao contexto
08 linguagens recursivamente enumeraveis e sensiveis ao contextoComputação Depressão
 
Mysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisMysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisElton Minetto
 
Teoria da Computação
Teoria da ComputaçãoTeoria da Computação
Teoria da ComputaçãoAlefe Variani
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 
Máquinas de Turing
Máquinas de TuringMáquinas de Turing
Máquinas de TuringTania Arroyo
 
Apostila Programando Para Web Com Php & My Sql
Apostila   Programando Para Web Com Php & My SqlApostila   Programando Para Web Com Php & My Sql
Apostila Programando Para Web Com Php & My Sqlrinaldocalixto2010
 
Jesus - o maior líder e gerente que passou pela face da terra
Jesus - o maior líder e gerente que passou pela face da terraJesus - o maior líder e gerente que passou pela face da terra
Jesus - o maior líder e gerente que passou pela face da terragrupodepaisceb
 

Destacado (20)

Algoritmo e lógica de programação
Algoritmo e lógica de programaçãoAlgoritmo e lógica de programação
Algoritmo e lógica de programação
 
Como Estudar Sozinho em Casa
Como Estudar Sozinho em CasaComo Estudar Sozinho em Casa
Como Estudar Sozinho em Casa
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Haskell
HaskellHaskell
Haskell
 
Ubuntu Touch - O Linux de bolso.
Ubuntu Touch - O Linux de bolso.Ubuntu Touch - O Linux de bolso.
Ubuntu Touch - O Linux de bolso.
 
Autômatos Celulares
Autômatos CelularesAutômatos Celulares
Autômatos Celulares
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Comunicação e Empregabilidade
Comunicação e EmpregabilidadeComunicação e Empregabilidade
Comunicação e Empregabilidade
 
Turing seminar-2012
Turing seminar-2012Turing seminar-2012
Turing seminar-2012
 
Algoritmo de euclides
Algoritmo de euclidesAlgoritmo de euclides
Algoritmo de euclides
 
08 linguagens recursivamente enumeraveis e sensiveis ao contexto
08   linguagens recursivamente enumeraveis e sensiveis ao contexto08   linguagens recursivamente enumeraveis e sensiveis ao contexto
08 linguagens recursivamente enumeraveis e sensiveis ao contexto
 
Mysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisMysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveis
 
Algoritmo de Euclides
Algoritmo de EuclidesAlgoritmo de Euclides
Algoritmo de Euclides
 
Teoria da Computação
Teoria da ComputaçãoTeoria da Computação
Teoria da Computação
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Máquinas de Turing
Máquinas de TuringMáquinas de Turing
Máquinas de Turing
 
Aula 02
Aula 02Aula 02
Aula 02
 
Apostila Programando Para Web Com Php & My Sql
Apostila   Programando Para Web Com Php & My SqlApostila   Programando Para Web Com Php & My Sql
Apostila Programando Para Web Com Php & My Sql
 
Jesus - o maior líder e gerente que passou pela face da terra
Jesus - o maior líder e gerente que passou pela face da terraJesus - o maior líder e gerente que passou pela face da terra
Jesus - o maior líder e gerente que passou pela face da terra
 
Máquina de turing
Máquina de turingMáquina de turing
Máquina de turing
 

Similar a Mini-Curso Haskell SEMAC 2013

Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicMarcio Junior Vieira
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicAmbiente Livre
 
Padrões de projeto em linguagens funcionais
Padrões de projeto em linguagens funcionaisPadrões de projeto em linguagens funcionais
Padrões de projeto em linguagens funcionaisItalos Estilon
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...tdc-globalcode
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilabMarco Antônio
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLGeorge Mendonça
 

Similar a Mini-Curso Haskell SEMAC 2013 (7)

Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice Basic
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice Basic
 
Padrões de projeto em linguagens funcionais
Padrões de projeto em linguagens funcionaisPadrões de projeto em linguagens funcionais
Padrões de projeto em linguagens funcionais
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilab
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSL
 
07-lambda.pdf
07-lambda.pdf07-lambda.pdf
07-lambda.pdf
 

Más de MikeNandes

Guia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem PascalGuia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem PascalMikeNandes
 
Programando para Iphone e Ipad
Programando para Iphone e IpadProgramando para Iphone e Ipad
Programando para Iphone e IpadMikeNandes
 
Curso basico matlab
Curso basico matlabCurso basico matlab
Curso basico matlabMikeNandes
 
Desenvolvimento de jogos 3 D
Desenvolvimento de jogos 3 DDesenvolvimento de jogos 3 D
Desenvolvimento de jogos 3 DMikeNandes
 
Curso De Programação Em DelPhi
Curso De Programação Em DelPhiCurso De Programação Em DelPhi
Curso De Programação Em DelPhiMikeNandes
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginasMikeNandes
 
Asp dot net e learning
Asp dot net e learningAsp dot net e learning
Asp dot net e learningMikeNandes
 

Más de MikeNandes (7)

Guia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem PascalGuia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem Pascal
 
Programando para Iphone e Ipad
Programando para Iphone e IpadProgramando para Iphone e Ipad
Programando para Iphone e Ipad
 
Curso basico matlab
Curso basico matlabCurso basico matlab
Curso basico matlab
 
Desenvolvimento de jogos 3 D
Desenvolvimento de jogos 3 DDesenvolvimento de jogos 3 D
Desenvolvimento de jogos 3 D
 
Curso De Programação Em DelPhi
Curso De Programação Em DelPhiCurso De Programação Em DelPhi
Curso De Programação Em DelPhi
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
 
Asp dot net e learning
Asp dot net e learningAsp dot net e learning
Asp dot net e learning
 

Mini-Curso Haskell SEMAC 2013

  • 1. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Mini-Curso de Haskell - SEMAC 2013/1 Marcelo Garlet Millani Universidade Federal do Rio Grande do Sul Instituto de Informática Grupo PET Computação 22 de maio de 2013
  • 2. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências 1 Básico de OpenGl 2 Qualied Types Denindo Classes Algumas Classes Úteis 3 Functor e Monad 4 Handles 5 Referências
  • 3. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências OpenGL • OpenGl é uma biblioteca gráca • Permite aproveitar a GPU para desenhos • Capaz de trabalhar em 3D, mas usaremos apenas 2D • GHC possui bindings para Haskell • Módulo Graphics.Rendering.OpenGL • Pacote libghc-opengl-dev no Linux (Debian) • Usaremos a GLUT (Graphics.UI.GLUT) para a janela • Pacote libghc-glut-dev no Linux (Debian)
  • 4. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Inicialização getArgsAndInitialize Inicializa a GLUT createWindow Cria uma janela gráca displayCallback Determina a função que será usada para desenhar mainLoop Inicia o processo de desenho Exemplo 1 main = do 2 g e t A r g s A n d I n i t i a l i z e 3 createWindow Hello World 4 d i s p l a y C a l l b a c k $= d i s p l a y myPoints 5 mainLoop
  • 5. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Desenho clear Limpa um buer renderPrimitive Desenha uma primitiva do OpenGL ush Finaliza o desenho vertex Especica um vértice do polígono que está sendo desenhado Exemplo 1 d i s p l a y p = do 2 c l e a r [ ColorBuffer ] 3 r e n d e r P r i m i t i v e LineLoop $ do 4 mapM_ (( x , y , z)−vertex$Vertex3 x y z ) p 5 f l u s h
  • 6. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Exercício Exercício Faça um programa que desenhe o triângulo de Sierpinski. • Composto por triângulos retângulos isósceles • Divide-se em três regiões: direita, cima e centro • Cada região será composta por um triângulo com a metade do lado
  • 7. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências 1 Básico de OpenGl 2 Qualied Types Denindo Classes Algumas Classes Úteis 3 Functor e Monad 4 Handles 5 Referências
  • 8. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Para que servem • Uso de funções polimórcas • Restringem os tipos para os quais a função está denida Exemplo Função de soma: 1 (+) : : Num a= a−a−a Denida para qualquer a tal que a seja um membro de Num.
  • 9. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Como usar • Denimos como as funções da classe serão aplicadas para um certo tipo de dado • Em alguns casos, não é necessário denir todas as funções • Por exemplo, basta denir igualdade (==) para se ter diferença (/=) Exemplo 1 instance Eq a = Eq ( Figure a ) where 2 C i r c l e r == C i r c l e s = 3 r == s 4 Rectangle w h == Rectangle a b = 5 w == a h == b 6 _ == _ = False
  • 10. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Derivação • Algumas classes possuem suporte para derivação • Usam uma implementação padrão para qualquer tipo de dado • Funciona somente com: • Eq • Ord • Enum • Bounded • Show • Read
  • 11. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Derivação Exemplo 1 data Quadrilatero a = Retangulo a a | Quadrado a 2 deriving (Show, Read,Eq, Ord)
  • 12. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Denindo Classes • Faremos uma classe para uniformizar o desenho de primitivas • Minimizaremos a inuência do OpenGL • Ter os vértices é o suciente para desenhar algo Funções 1 class Drawable d where 2 toVertex : : d − ( Float , Float) − 3 [ ( Float , Float ) ] 4 draw : : PrimitiveMode − d − 5 ( Float , Float) − IO () 6 drawWire : : ( Float , Float) − 7 d − IO ()
  • 13. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Conversões • OpenGL usa o tipo GLoat • Usaremos uma função para converter de Float para GLoat • Essa função pode car fora da classe Conversões 1 convertToGLfloat x = ( realToFrac x ) : : GLfloat 2 convertPoint (x , y ) = 3 vertex $ Vertex2 ( convertToGLfloat x ) 4 ( convertToGLfloat y )
  • 14. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Implementação • Providenciaremos uma implementação padrão para draw e drawWire • Basta fornecer uma implementação para toVertex Funções 1 draw mode f i g u r e point = 2 r e n d e r P r i m i t i v e mode $ 3 mapM_ convertPoint ( toVertex f i g u r e point ) 4 5 drawWire point f i g u r e = 6 draw LineLoop f i g u r e point
  • 15. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Exercício Exercício Faça com que o tipo Figure seja um membro da classe Drawable. Com isso, desenhe um fractal que seja um círculo dentro de um quadrado dentro de um círculo dentro de um quadrado ...
  • 16. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Eq Denição 1 class Eq a where 2 (==), (/=) : : a − a − Bool 3 4 x /= y = not ( x == y ) 5 x == y = not ( x /= y )
  • 17. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Ord Denição 1 class (Eq a ) = Ord a where 2 compare : : a − a − Ordering 3 ( ) , (=), (=), () : : a − a − Bool 4 max, min : : a − a − a 5 6 compare x y | x == y = EQ 7 | x = y = LT 8 | otherwise = GT
  • 18. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Ord (Continuação) Denição 1 −− c l a s s ( Eq a ) = Ord a where 2 x = y = compare x y /= GT 3 x y = compare x y == LT 4 x = y = compare x y /= LT 5 x y = compare x y == GT
  • 19. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Ord (Continuação) Denição 1 −− c l a s s ( Eq a ) = Ord a where 2 max x y | x = y = y 3 | otherwise = x 4 min x y | x = y = x 5 | otherwise = y
  • 20. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Exercício Exercício Estenda a denição de Figure para que ela faça parte da classe Ord. Use a área de gura como critério. • Para testar a sua denição, use a função sort e sortBy da biblioteca Data.List • sort :: Ord a = [a] - [a] • sortBy :: (a - a - Ordering) - [a] - [a]
  • 21. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências 1 Básico de OpenGl 2 Qualied Types Denindo Classes Algumas Classes Úteis 3 Functor e Monad 4 Handles 5 Referências
  • 22. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Functor • Dene um meio de transformar tipos de dados Classe 1 class Functor f where 2 fmap : : ( a − b) − f a − f b • f é um construtor Propriedades Esperadas 1 fmap id = id 2 fmap ( f . g) = fmap f . fmap g
  • 23. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Exemplo Exemplo 1 instance Functor [ ] where 2 fmap f [ ] = [ ] 3 fmap f (h : t l ) = f h : fmap f t l • Comportamento igual ao da função map
  • 24. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Monad Denição 1 class Monad m where 2 (=) : : m a − ( a − m b) − m b −− b i n d 3 () : : m a − m b − m b −− s e q u e n c e 4 return : : a − m a 5 fail : : String − m a 6 7 m k = m = _ − k 8 fail s = error s
  • 25. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Sintaxe do • Apenas açúcar sintático • Na realidade, utiliza os operadores de mônadas Regras 1 do e 2 − e 3 do e1 ; e2 ; . . . ; en 4 − e1 do e2 ; . . . ; e_n
  • 26. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Monad Regras 1 do pat − e1 ; e2 ; . . . ; en 2 − 3 let ok pat = do e2 ; . . . ; en 4 ok _ = fail . . . 5 in e1 = ok
  • 27. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Monad Regras 1 do let d e c l l i s t ; e2 ; . . . ; en 2 − let d e c l l i s t in do e2 ; . . . ; en
  • 28. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências 1 Básico de OpenGl 2 Qualied Types Denindo Classes Algumas Classes Úteis 3 Functor e Monad 4 Handles 5 Referências
  • 29. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Handles • Usados para abrir um arquivo para diversas modicações • São mais ecientes do que funções como readFile ou writeFile • É necessário lembrar de fechar o arquivo • Usa-se a biblioteca System.IO Algumas Funções 1 openFile : : FilePath − IOMode − IO Handle 2 hClose : : Handle − IO () 3 hPutStr : : Handle − String − IO () 4 hGetChar : : Handle − IO Char 5 hGetLine : : Handle − IO String 6 hGetContents : : Handle − IO String
  • 30. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Exercício Exercício Faça um programa que escreva diversas guras geométricas em um arquivo (usando a classe Show) e depois leia essas guras do arquivo (usando Read). Trate o arquivo com handles. Derive as classes em vez de implementá-las. • hGetContents é uma função de leitura lazy • Para conveniência, fechem o arquivo de leitura no nal do programa, em vez de no nal da leitura. • Existem alternativas melhores, como tratar o nal do arquivo
  • 31. Mini-Curso de Haskell - SEMAC 2013/1 M. Millani Básico de OpenGl Qualied Types Denindo Classes Algumas Classes Úteis Functor e Monad Handles Referências Referências Hal Daumé III, Yet Another Haskell Tutorial Hudak, Paul. The Haskell School of Expression http: //www.haskell.org/haskellwiki/OpenGLTutorial1 http://www.haskell.org/onlinereport