SlideShare uma empresa Scribd logo
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

Official "push" and real-time capabilities for Symfony and API Platform (Merc...
Official "push" and real-time capabilities for Symfony and API Platform (Merc...Official "push" and real-time capabilities for Symfony and API Platform (Merc...
Official "push" and real-time capabilities for Symfony and API Platform (Merc...
Les-Tilleuls.coop
 

Mais procurados (20)

Porting Android
Porting AndroidPorting Android
Porting Android
 
Hands on ansible
Hands on ansibleHands on ansible
Hands on ansible
 
Course 102: Lecture 6: Seeking Help
Course 102: Lecture 6: Seeking HelpCourse 102: Lecture 6: Seeking Help
Course 102: Lecture 6: Seeking Help
 
Bulk Export Tool for Alfresco
Bulk Export Tool for AlfrescoBulk Export Tool for Alfresco
Bulk Export Tool for Alfresco
 
Java spring framework
Java spring frameworkJava spring framework
Java spring framework
 
Kernel Recipes 2015: Representing device-tree peripherals in ACPI
Kernel Recipes 2015: Representing device-tree peripherals in ACPIKernel Recipes 2015: Representing device-tree peripherals in ACPI
Kernel Recipes 2015: Representing device-tree peripherals in ACPI
 
Docker, Linux Containers (LXC), and security
Docker, Linux Containers (LXC), and securityDocker, Linux Containers (LXC), and security
Docker, Linux Containers (LXC), and security
 
Travis CI
Travis CITravis CI
Travis CI
 
Steps to identify ONTAP latency related issues
Steps to identify ONTAP latency related issuesSteps to identify ONTAP latency related issues
Steps to identify ONTAP latency related issues
 
Introduction to shell scripting
Introduction to shell scriptingIntroduction to shell scripting
Introduction to shell scripting
 
Тестирование ПО (лекция 2)
Тестирование ПО (лекция 2)Тестирование ПО (лекция 2)
Тестирование ПО (лекция 2)
 
Introdução ao Spring Framework MVC
Introdução ao Spring Framework MVCIntrodução ao Spring Framework MVC
Introdução ao Spring Framework MVC
 
Android CTS training
Android CTS trainingAndroid CTS training
Android CTS training
 
Jenkins tutorial
Jenkins tutorialJenkins tutorial
Jenkins tutorial
 
Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot images
 
Using GitHub and Visual Studio Code for Mainframe Development
Using GitHub and Visual Studio Code for Mainframe DevelopmentUsing GitHub and Visual Studio Code for Mainframe Development
Using GitHub and Visual Studio Code for Mainframe Development
 
Init of Android
Init of AndroidInit of Android
Init of Android
 
Official "push" and real-time capabilities for Symfony and API Platform (Merc...
Official "push" and real-time capabilities for Symfony and API Platform (Merc...Official "push" and real-time capabilities for Symfony and API Platform (Merc...
Official "push" and real-time capabilities for Symfony and API Platform (Merc...
 
Maven
MavenMaven
Maven
 
A practical guide to buildroot
A practical guide to buildrootA practical guide to buildroot
A practical guide to buildroot
 

Semelhante a Seminario haskell

Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskell
Daniel Farias
 
Linguágens de programação
Linguágens de programaçãoLinguágens de programação
Linguágens de programação
AlbertoVach
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
essa
 
Resumo vinculacao aula lp1 10 a
Resumo vinculacao   aula lp1 10 aResumo vinculacao   aula lp1 10 a
Resumo vinculacao aula lp1 10 a
Pedro 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-09
essa
 
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
essa
 

Semelhante a Seminario haskell (20)

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++
 
Linguagensdeprogramao 100611235520-phpapp01
Linguagensdeprogramao 100611235520-phpapp01Linguagensdeprogramao 100611235520-phpapp01
Linguagensdeprogramao 100611235520-phpapp01
 

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.