SlideShare uma empresa Scribd logo
1 de 130
Haskell Seminário de Linguagens de Programação GUILHERME GOMES NEVES DE OLIVEIRA RENZO AUGUSTO LAPELLIGRINI PETRI
ROTEIRO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
O que é Haskell ? ,[object Object]
Paradigma Funcional ,[object Object],[object Object],[object Object],inputs output  12 34 46
Programação Funcional ,[object Object],[object Object],[object Object],[object Object],[object Object]
Funcional X Imperativo ,[object Object],[object Object],[object Object],sum =0; for(int i = 1; i < 11; i++ ) sum = sum + i; sum [1..10] O método de computação é por:  variable assignment; ESTADO O método de computação é:  function application VALORES
Histórico 1930: Alonzo Church desenvolveu  o cálculo de  lambda , um simples, mas poderoso teorema de funções.
Histórico 1950: John McCarthy desenvolveu  Lisp , a primeira linguagem funcional, com influência da  teoria de lambda  mas  aceitando atribuições de variáveis.
Histórico 1970: Robin Milner e outros desenvolveram a   ML , a primeira linguagem funcional moderna, com introdução de inferência de tipos  e tipos polimórficos.
Histórico 1987:
Histórico ,[object Object],[object Object],[object Object]
[object Object],Histórico
Histórico
2003: O comitê publicou  Haskell 98 , definindo uma versão estável da linguagem. Histórico
Influência Haskell  foi fortemente influenciada por  ML Algol 60 Algol 68 ML Modula Pascal Haskell Lisp
Atualmente
Nova vida ? Usuários 1,000,000 1 100 10,000 1990 1995 2000 2005 2010
Definindo ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classificação ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Arquitetura IDE Haskell (Kernel) Haskell Service (Modules) Interface Link Direto GHC (Compilador)
Kernel Haskell ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Estrutura do Programa
Estrutura do Programa Análise ,[object Object],[object Object],[object Object],[object Object],[object Object]
Expressão ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],TIPO VALOR
Namespaces ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Características Gerais ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Características Gerais ,[object Object],[object Object],[object Object],[object Object]
Características ,[object Object],[object Object],[object Object],[object Object],[object Object]
Características ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Características ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Por que Haskell ? ,[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],Por que Haskell ?
Aplicações ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Softwares ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Quem usa ? Microprocessor verification
Estrutura Léxica e Sintática
Module
Export
Definitions
Declaration Functions
Decls
Expression
Expr
Patroon
Type Typ
Context Classe
Literal Char
Var e outros
Simbols
Árvore de derivação ,[object Object],[object Object],2  3+4 = 4 + 2  3 2
Sintaxe
Sintaxe ,[object Object],[object Object],[object Object],[object Object]
Equivalência Matematicamente Haskell f(x) f(x,y) f(g(x)) f(x,g(y)) f(x)g(y) f x f x y f (g x) f x (g y) f x * g y
[object Object],Regra de Escopo let  v1 = e1 v2 = e2  ...  vi = ei ... in e   Escopo de vi: Parte do programa onde vi possui valor = ei
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Regras de Layout
Regras de Layout a = 10 b = 20 c = 30 a = 10 b = 20 c = 30 a = 10 b = 20 c = 30
a = b + c where b = 1 c = 2 d = a * 2 a = b + c where {b = 1; c = 2} d = a * 2 Implícito Explícito Regras de Layout =
O que é um TIPO? Um tipo é um nome para uma  coleção  de valores relacionados (propriedades em comum) Por exemplo, em  Haskell , um tipo básico é:   True Bool False
Tipos em Haskell e :: t ,[object Object],Usamos a notação:   e  ::  T   para indicar que a avaliação da expressão produz um valor do tipo   T .
Tipos Básicos Bool   True, False Char   'a', 'x', '34', ''  String   “oi”, “Sim” Int  0, 94, -45  Float   3.0, 0.54422  Double   3.1415 Bool -  Valores Lógicos Char -  Caracteres simples Integer -  Inteiros de precisão arbitrária Float - Números de ponto flutuante String -  String de caracteres Int -  Inteiros de precisão fixa
Operadores Básicos > maior >= maior ou igual == igual /= diferente < menor <= menor  ou igual +  Soma -  Subtração *  Multiplicação ^ Potência div  Divisão inteira mod  resto da divisão abs  valor absoluto de um inteiro negate  troca o sinal do valor   &&  e   | |  ou not  negação
Tipo Lista Em geral: Uma  lista  é uma sequência de valores do mesmo tipo : [t]  é um tipo de litsta com elementos do tipo  t . [1,2,3,4]  :: [Int] [False,True,False] :: [Bool] [‘a’,’b’,’e’] :: [Char]
Operação com Listas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Retorna o primeiro elemento da lista. Retorna a calda da lista, ou, não exibe o primeiro elemento. Retorna o último elemento da lista.   Retorna todos os elementos da lista menos o último.
Operação com Listas length ghci> length [5,4,3,2,1]   5     reverse ghci> reverse [5,4,3,2,1]   [1,2,3,4,5]      elem ghci> 4 `elem` [3,4,5,6]   True   ghci> 10 `elem` [3,4,5,6]   False          Retorna o comprimento da lista.   Inverte os elementos da lista. Verifica se um elemento está presente na lista.    
Operação com Listas ghci> [1..20]   [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]    ghci> ['a'..'z']   &quot;abcdefghijklmnopqrstuvwxyz“    ghci> ['K'..'Z']   &quot;KLMNOPQRSTUVWXYZ&quot;               Selecionando intervalo de elementos em listas.    
Tuplas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Recebe um par e retorna o primeiro elemento.     Podem conter combinação de vários tipos .   Utilizado para combinar os elementos de duas listas.
Funções ” x” é o nome da função. Os tipos dos 4 argumentos da função. O último tipo especificado identifica o tipo de dado a ser retornado. ,[object Object],[object Object],[object Object],add :: Int -> Int -> int add x y = x + y
Funções Guards é uma característica na definição de funções, que exploram a capacidade de se inserir condições que são utilizadas como alternativas para a função. guard. ,[object Object],[object Object],[object Object],[object Object],[object Object]
Criando Funções É possivel criar suas próprias funções: Salvando a função como nome.hs é possível executá-la posteriormente. ,[object Object],[object Object],ghci> nome:   [1  de  1] Compilando principal              (nome.hs, interpretado)   Ok, módulos carregados: Main.   ghci> doubleMe 9   18   ghci> doubleMe 8,3   16,6  A mesma pode ser utilizada com números de qualquer tipo.
Criando Funções É possível também chamar funções dentro de funções.   doubleUs y = x *2 + y *2 ghci> doubleUs 4 9   26   ghci> doubleUs 2,3 34,2   73,0   ghci> doubleUs 28 88 + doubleMe 123   478   Sendo assim é possível redefinir uma função. doubleUs x y = doubleMe x + y doubleMe  
Polimorfismo Há polimorfismo universal, a função possui um tipo genérico e a mesma definição é usada para vários tipos.  A função  length  pode retornar tanto o tamanho de uma String, quanto de uma Lista. ,[object Object],[object Object],[object Object]
Classes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Haskell permite que o usuário, programador, crie alguns outros tipos denominados Classes, que funcionam como tipos de dados abstratos. O usuário tem total liberdade para definir inúmeros tipos de classes diferentes. A assinatura da classe define as funções que poderão ser aplicadas aquela classe. ” a” é uma variável que representa qualquer tipo de dado. “ V” é o nome da classe.
Verificação de Tipos Tanto os compiladores quanto os interpretadores Haskell implementam o mecanismo de  checagem forte de tipos de dados , devido a tamanha variedade de tipos.  Monomórfico Polimórfico
Verificação de Tipos- Monomórficos ,[object Object],A checagem de tipos monomórficos, isto é, sem polimorfismo.  ” e” é uma expressão que pode ser um literal, uma variável ou constante, ou pode ser construído aplicando uma função sobre seus argumentos, que são cada um também expressões.
Verificação de Tipos- Monomórficos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Verificação de Tipos-  Polimórficos Para realizar a verificação de tipos em funções polimórficas, o Haskell lança mão do conceito de  unificação . Assim como em linguagens lógicas, uma unificação ocorre quando o analisador de expressões do compilador/interpretador consegue determinar quais variáveis assumirão um determinado argumento genérico, e também de qual tipo dedado será este argumento.
Verificação de Tipos-  Polimórficos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Exemplos
Main
Declaração Os símbolos “—” “{-  -}” comentários. Declara uma nova função, especificando seu tipo. O símbolo :: pode ser lido como “é do tipo...&quot; Determina que valor tem o valor 35. Determina que square é uma função de Int para Int . Equação que define a função. Define o resultado, x*x , da aplicação de square sobre x (argumento). Nomes de funções começam com letras minúsculas. Nomes de tipos começam com letras maiúsculas. 1   {----------------------------} 2   --  example.hs 3   ---------------------------- 4   valor :: Int 5   valor = 35 6   7   square :: Int -> Int 8   square x = x * x 9
Condição Equação condicional, Os símbolo “|” , “=“ são utilizados para emular o comando de seleção. O valor à direita de “=“ é retornado se a condição for verdadeira. Determina que mystery é um função que recebe 3 Objetos Int  e retorna True ou False  Determina que maxx é uma função que recebe 2 objetos Int e retorna Int . ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Cálculos ,[object Object],A comparação é feita com os valores de a e b, depois b com c  o resultado é a comparação da 1 ˚   sentença com a segunda. mystery a b c = (a == b)  &&  (b == c) mystery 5 8 8 = (5==8)  &&  (8==8) =  False   &&   True =  False mystery 9 9 9 = (9==9)  &&  (9 == 9) =  True   &&   True =  True
[object Object],Cálculos maxx m n | m >= n  = m |  otherwise  = n maxx 7 4 = 7 >= 4 =  True = 7 maxx 12 45 = 12 >= 45 =  False =  otherwise  =  True = 45
Quick Sort  em Haskell Se a lista é vazia, não há nada a ordenar . s é o 1 o  elemento da lista que é utilizado com pivo. xs representa o restante da lista. A lista restante é dividida em 2 partes: a primeira contém apenas os elementos de xs que são menores ou igual a s. A segunda, contém apenas os elementos de xs que são maiores. As duas listas são ordenadas recursivamente e o resultado é obtido concatenando a primeira lista (ordenada), com a lista que contém s e a segunda lista (ordenada.) qsort [] = [] qsort ( s : xs ) = qsort [ x | x  <-  xs , x < s]  ++ [s] ++  qsort [ x|x <- xs, x >= s  ]
Interação Para escrever programas interativos que leem dados a partir do teclado e escrevem na tela, são necessários:  IO Programas interativos podem ser escritos em Haskell usando tipos que podem envolver efeitos colaterais -  IO . interactive program inputs outputs keyboard screen
HUGS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GHC ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
O Compilador: GHC ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
O Compilador: GHC ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
O GHC API ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Sequência ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tipos de dados-chave ,[object Object]
GHC : O Code Generator ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GHC : Storage Manager
GHC: A disposição dos objetos Heap ,[object Object],[object Object],[object Object],[object Object],[object Object]
Tabelas Info ,[object Object]
Tabelas Info ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tabelas Info ,[object Object],[object Object]
Objetos Dinâmicos X Estáticos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Layout da pilha ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Layout da pilha O  SRT   = Campo de ponteiro para a tabela de referência estático (SRT);
Garbage Collection ,[object Object],[object Object],[object Object],[object Object],[object Object]
Alocador de Blocos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Alocador de Blocos ,[object Object],[object Object],[object Object]
Garbage Collection ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Garbage Collection - Estruturas ,[object Object],[object Object]
Garbage Collection - Estruturas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Garbage Collection - Estruturas
Garbage Collection - Estruturas
Espaço das Classes Normal Overlap Closed Local Normal Global Implicit Parameters Haskell GHC Methods Dependência local
 
Fluxograma Coerção
[object Object],YHC
verification : bytecode :: typechecking : source code YHC
YHC
DICAS ,[object Object],[object Object],[object Object]
Avaliação ,[object Object],[object Object],[object Object]
Haskell X Outras Linguagens ,[object Object],[object Object],[object Object],[object Object],[object Object]
Haskell X Outras Linguagens ,[object Object],[object Object]
Comparação
Curiosidades ,[object Object],[object Object],[object Object]
Curiosidades ,[object Object],[object Object],[object Object],[object Object],[object Object]
Curiosidades ,[object Object]
Curiosidades
Vantagens ,[object Object],[object Object],[object Object],[object Object],[object Object]
Vantagens ,[object Object],[object Object],[object Object],[object Object],[object Object]
Desvantagens ,[object Object],[object Object]
Conclusão ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Bibliografia ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Dúvidas

Mais conteúdo relacionado

Mais procurados

Lakatos,I.-La metodología de los programas de investigación científica
Lakatos,I.-La metodología de los programas de investigación científicaLakatos,I.-La metodología de los programas de investigación científica
Lakatos,I.-La metodología de los programas de investigación científicagustavo carlos bitocchi
 
Catalogazione dei periodici
Catalogazione dei periodici Catalogazione dei periodici
Catalogazione dei periodici Romina D'Antoni
 
2. Indicadores Bibliométricos
2. Indicadores Bibliométricos2. Indicadores Bibliométricos
2. Indicadores BibliométricosNieves Gonzalez
 
Obras de Referencia grupo 6
Obras de Referencia grupo 6Obras de Referencia grupo 6
Obras de Referencia grupo 6MARCELA
 
Gestores de referencias bibliográficas: Reference Manager
Gestores de referencias bibliográficas: Reference ManagerGestores de referencias bibliográficas: Reference Manager
Gestores de referencias bibliográficas: Reference ManagerCentro de Salud El Greco
 

Mais procurados (7)

Lakatos,I.-La metodología de los programas de investigación científica
Lakatos,I.-La metodología de los programas de investigación científicaLakatos,I.-La metodología de los programas de investigación científica
Lakatos,I.-La metodología de los programas de investigación científica
 
Catalogazione dei periodici
Catalogazione dei periodici Catalogazione dei periodici
Catalogazione dei periodici
 
2. Indicadores Bibliométricos
2. Indicadores Bibliométricos2. Indicadores Bibliométricos
2. Indicadores Bibliométricos
 
Obras de Referencia grupo 6
Obras de Referencia grupo 6Obras de Referencia grupo 6
Obras de Referencia grupo 6
 
Publicaciones seriadas
Publicaciones seriadasPublicaciones seriadas
Publicaciones seriadas
 
Gestores de referencias bibliográficas: Reference Manager
Gestores de referencias bibliográficas: Reference ManagerGestores de referencias bibliográficas: Reference Manager
Gestores de referencias bibliográficas: Reference Manager
 
Fuentes de información en la investgación
Fuentes de información en la investgaciónFuentes de información en la investgación
Fuentes de información en la investgación
 

Semelhante a Seminario haskell

Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskellDaniel Farias
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Valmon Gaudencio
 
Apresentação final
Apresentação finalApresentação final
Apresentação finalvalmon
 
Linguágens de programação
Linguágens de programaçãoLinguágens de programação
Linguágens de programaçãoAlbertoVach
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfAndreiaCristinaFlore
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programaçãoessa
 
Resumo vinculacao aula lp1 10 a
Resumo vinculacao   aula lp1 10 aResumo vinculacao   aula lp1 10 a
Resumo vinculacao aula lp1 10 aPedro Augusto
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 

Semelhante a Seminario haskell (20)

Haskell
HaskellHaskell
Haskell
 
Haskell motivação
Haskell motivaçãoHaskell motivação
Haskell motivação
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskell
 
Haskell motivaçãoaula2
Haskell motivaçãoaula2Haskell motivaçãoaula2
Haskell motivaçãoaula2
 
1.1.paradigmas
1.1.paradigmas1.1.paradigmas
1.1.paradigmas
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Apresentação final
Apresentação finalApresentação final
Apresentação final
 
Linguágens de programação
Linguágens de programaçãoLinguágens de programação
Linguágens de programação
 
Linguagem da programação
Linguagem da programaçãoLinguagem da programação
Linguagem da programação
 
Linguagem da programação
Linguagem da programaçãoLinguagem da programação
Linguagem da programação
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Object pascal
Object pascalObject pascal
Object pascal
 
Apostila c
Apostila cApostila c
Apostila c
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Resumo vinculacao aula lp1 10 a
Resumo vinculacao   aula lp1 10 aResumo vinculacao   aula lp1 10 a
Resumo vinculacao aula lp1 10 a
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
15. introducao ao c++
15. introducao ao c++15. introducao ao c++
15. introducao ao c++
 

Seminario haskell

  • 1. Haskell Seminário de Linguagens de Programação GUILHERME GOMES NEVES DE OLIVEIRA RENZO AUGUSTO LAPELLIGRINI PETRI
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7. Histórico 1930: Alonzo Church desenvolveu o cálculo de lambda , um simples, mas poderoso teorema de funções.
  • 8. Histórico 1950: John McCarthy desenvolveu Lisp , a primeira linguagem funcional, com influência da teoria de lambda mas aceitando atribuições de variáveis.
  • 9. Histórico 1970: Robin Milner e outros desenvolveram a ML , a primeira linguagem funcional moderna, com introdução de inferência de tipos e tipos polimórficos.
  • 11.
  • 12.
  • 14. 2003: O comitê publicou Haskell 98 , definindo uma versão estável da linguagem. Histórico
  • 15. Influência Haskell foi fortemente influenciada por ML Algol 60 Algol 68 ML Modula Pascal Haskell Lisp
  • 17. Nova vida ? Usuários 1,000,000 1 100 10,000 1990 1995 2000 2005 2010
  • 18.
  • 19.
  • 20. Arquitetura IDE Haskell (Kernel) Haskell Service (Modules) Interface Link Direto GHC (Compilador)
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35. Quem usa ? Microprocessor verification
  • 36. Estrutura Léxica e Sintática
  • 41. Decls
  • 43. Expr
  • 50.
  • 52.
  • 53. Equivalência Matematicamente Haskell f(x) f(x,y) f(g(x)) f(x,g(y)) f(x)g(y) f x f x y f (g x) f x (g y) f x * g y
  • 54.
  • 55.
  • 56. Regras de Layout a = 10 b = 20 c = 30 a = 10 b = 20 c = 30 a = 10 b = 20 c = 30
  • 57. a = b + c where b = 1 c = 2 d = a * 2 a = b + c where {b = 1; c = 2} d = a * 2 Implícito Explícito Regras de Layout =
  • 58. O que é um TIPO? Um tipo é um nome para uma coleção de valores relacionados (propriedades em comum) Por exemplo, em Haskell , um tipo básico é: True Bool False
  • 59.
  • 60. Tipos Básicos Bool True, False Char 'a', 'x', '34', '' String “oi”, “Sim” Int 0, 94, -45 Float 3.0, 0.54422 Double 3.1415 Bool - Valores Lógicos Char - Caracteres simples Integer - Inteiros de precisão arbitrária Float - Números de ponto flutuante String - String de caracteres Int - Inteiros de precisão fixa
  • 61. Operadores Básicos > maior >= maior ou igual == igual /= diferente < menor <= menor ou igual + Soma - Subtração * Multiplicação ^ Potência div Divisão inteira mod resto da divisão abs valor absoluto de um inteiro negate troca o sinal do valor && e | | ou not negação
  • 62. Tipo Lista Em geral: Uma lista é uma sequência de valores do mesmo tipo : [t] é um tipo de litsta com elementos do tipo t . [1,2,3,4] :: [Int] [False,True,False] :: [Bool] [‘a’,’b’,’e’] :: [Char]
  • 63.
  • 64. Operação com Listas length ghci> length [5,4,3,2,1]   5     reverse ghci> reverse [5,4,3,2,1]   [1,2,3,4,5]      elem ghci> 4 `elem` [3,4,5,6]   True   ghci> 10 `elem` [3,4,5,6]   False          Retorna o comprimento da lista. Inverte os elementos da lista. Verifica se um elemento está presente na lista.  
  • 65. Operação com Listas ghci> [1..20]   [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]    ghci> ['a'..'z']   &quot;abcdefghijklmnopqrstuvwxyz“    ghci> ['K'..'Z']   &quot;KLMNOPQRSTUVWXYZ&quot;               Selecionando intervalo de elementos em listas.  
  • 66.
  • 67.
  • 68.
  • 69.
  • 70. Criando Funções É possível também chamar funções dentro de funções. doubleUs y = x *2 + y *2 ghci> doubleUs 4 9   26   ghci> doubleUs 2,3 34,2   73,0   ghci> doubleUs 28 88 + doubleMe 123   478   Sendo assim é possível redefinir uma função. doubleUs x y = doubleMe x + y doubleMe  
  • 71.
  • 72.
  • 73. Verificação de Tipos Tanto os compiladores quanto os interpretadores Haskell implementam o mecanismo de checagem forte de tipos de dados , devido a tamanha variedade de tipos. Monomórfico Polimórfico
  • 74.
  • 75.
  • 76. Verificação de Tipos- Polimórficos Para realizar a verificação de tipos em funções polimórficas, o Haskell lança mão do conceito de unificação . Assim como em linguagens lógicas, uma unificação ocorre quando o analisador de expressões do compilador/interpretador consegue determinar quais variáveis assumirão um determinado argumento genérico, e também de qual tipo dedado será este argumento.
  • 77.
  • 79. Main
  • 80. Declaração Os símbolos “—” “{- -}” comentários. Declara uma nova função, especificando seu tipo. O símbolo :: pode ser lido como “é do tipo...&quot; Determina que valor tem o valor 35. Determina que square é uma função de Int para Int . Equação que define a função. Define o resultado, x*x , da aplicação de square sobre x (argumento). Nomes de funções começam com letras minúsculas. Nomes de tipos começam com letras maiúsculas. 1 {----------------------------} 2 -- example.hs 3 ---------------------------- 4 valor :: Int 5 valor = 35 6 7 square :: Int -> Int 8 square x = x * x 9
  • 81.
  • 82.
  • 83.
  • 84. Quick Sort em Haskell Se a lista é vazia, não há nada a ordenar . s é o 1 o elemento da lista que é utilizado com pivo. xs representa o restante da lista. A lista restante é dividida em 2 partes: a primeira contém apenas os elementos de xs que são menores ou igual a s. A segunda, contém apenas os elementos de xs que são maiores. As duas listas são ordenadas recursivamente e o resultado é obtido concatenando a primeira lista (ordenada), com a lista que contém s e a segunda lista (ordenada.) qsort [] = [] qsort ( s : xs ) = qsort [ x | x <- xs , x < s] ++ [s] ++ qsort [ x|x <- xs, x >= s ]
  • 85. Interação Para escrever programas interativos que leem dados a partir do teclado e escrevem na tela, são necessários: IO Programas interativos podem ser escritos em Haskell usando tipos que podem envolver efeitos colaterais - IO . interactive program inputs outputs keyboard screen
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94. GHC : Storage Manager
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101. Layout da pilha O  SRT   = Campo de ponteiro para a tabela de referência estático (SRT);
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108. Garbage Collection - Estruturas
  • 109. Garbage Collection - Estruturas
  • 110. Espaço das Classes Normal Overlap Closed Local Normal Global Implicit Parameters Haskell GHC Methods Dependência local
  • 111.  
  • 113.
  • 114. verification : bytecode :: typechecking : source code YHC
  • 115. YHC
  • 116.
  • 117.
  • 118.
  • 119.
  • 121.
  • 122.
  • 123.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.