SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionIrving Che
 
Unidad 3 ensambladores
Unidad 3 ensambladoresUnidad 3 ensambladores
Unidad 3 ensambladoresGustavo Davila
 
LOS BUCLES/CICLOS (WHILE - DO/WHILE - FOR)
LOS BUCLES/CICLOS (WHILE - DO/WHILE - FOR)LOS BUCLES/CICLOS (WHILE - DO/WHILE - FOR)
LOS BUCLES/CICLOS (WHILE - DO/WHILE - FOR)Ramon E. Zorrilla
 
Principles of Programming Languages - Lecture Notes
Principles of Programming Languages -  Lecture NotesPrinciples of Programming Languages -  Lecture Notes
Principles of Programming Languages - Lecture Notessuthi
 
Macros...presentation
Macros...presentationMacros...presentation
Macros...presentationfika sweety
 
10. subalgoritmos parte i
10. subalgoritmos parte i10. subalgoritmos parte i
10. subalgoritmos parte ircarrerah
 
Other software processes (Software project Management)
Other software processes (Software project Management)Other software processes (Software project Management)
Other software processes (Software project Management)Ankit Gupta
 
Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.Yamilee Valerio
 
Programación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVAProgramación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVAMichelle Torres
 
Gonzalorojas 12 Uml, Patrones De Diseno
Gonzalorojas 12 Uml, Patrones De DisenoGonzalorojas 12 Uml, Patrones De Diseno
Gonzalorojas 12 Uml, Patrones De DisenoSpimy
 
Compiladores unidad1
Compiladores unidad1Compiladores unidad1
Compiladores unidad1X3025990
 

Was ist angesagt? (20)

Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacion
 
Ejercicios permisos
Ejercicios permisosEjercicios permisos
Ejercicios permisos
 
Back Tracking
Back TrackingBack Tracking
Back Tracking
 
Unidad 3 ensambladores
Unidad 3 ensambladoresUnidad 3 ensambladores
Unidad 3 ensambladores
 
LOS BUCLES/CICLOS (WHILE - DO/WHILE - FOR)
LOS BUCLES/CICLOS (WHILE - DO/WHILE - FOR)LOS BUCLES/CICLOS (WHILE - DO/WHILE - FOR)
LOS BUCLES/CICLOS (WHILE - DO/WHILE - FOR)
 
Principles of Programming Languages - Lecture Notes
Principles of Programming Languages -  Lecture NotesPrinciples of Programming Languages -  Lecture Notes
Principles of Programming Languages - Lecture Notes
 
Macros...presentation
Macros...presentationMacros...presentation
Macros...presentation
 
Técnica del backtracking o vuelta atrás
Técnica del backtracking o vuelta atrásTécnica del backtracking o vuelta atrás
Técnica del backtracking o vuelta atrás
 
10. subalgoritmos parte i
10. subalgoritmos parte i10. subalgoritmos parte i
10. subalgoritmos parte i
 
Other software processes (Software project Management)
Other software processes (Software project Management)Other software processes (Software project Management)
Other software processes (Software project Management)
 
Pseudo code
Pseudo codePseudo code
Pseudo code
 
Introducción a los sistemas expertos
Introducción a los sistemas expertosIntroducción a los sistemas expertos
Introducción a los sistemas expertos
 
Expresiones lambda
Expresiones lambdaExpresiones lambda
Expresiones lambda
 
Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.
 
Programación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVAProgramación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVA
 
Unit 2 notes.pdf
Unit 2 notes.pdfUnit 2 notes.pdf
Unit 2 notes.pdf
 
Gonzalorojas 12 Uml, Patrones De Diseno
Gonzalorojas 12 Uml, Patrones De DisenoGonzalorojas 12 Uml, Patrones De Diseno
Gonzalorojas 12 Uml, Patrones De Diseno
 
Inverted index
Inverted indexInverted index
Inverted index
 
Compiladores unidad1
Compiladores unidad1Compiladores unidad1
Compiladores unidad1
 
Capitulo 6
Capitulo 6Capitulo 6
Capitulo 6
 

Ähnlich wie 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
 

Ähnlich wie 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++
 

Kürzlich hochgeladen

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 

Kürzlich hochgeladen (8)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

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.