SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Seminário PLP
Linguagem Funcional Haskell

Daniele Montenegro
Joice Taciana
Agenda

 De onde vem o Nome;
 O que é Haskell;
 Um pouco da História;
 Características;
 O que precisa para Programar;
 Aplicações;
 Primeiro Programa – Olá Mundo;


                                   2/37
Agenda

 Avaliação Preguiçosa
 Inferência de Tipos
 Comandos e Expressões
 Listas
 Tuplas
 Funções
 Classes


                          3/37
De onde vem o Nome

   Do matemático Haskell B. Curry, conhecido por
    seu trabalho em lógica combinatória.




                                               4/37
O que é Haskell

 É uma linguagem de programação puramente
  funcional.
 Baseada no lambda-calculus, que surgiu nos
  anos 80;
 Open Souce.




                                           5/37
Um pouco da História

 Foi desenvolvida por um Comitê, que se reuniu
  a primeira vez em 1988;
 A primeira versão saiu em 1990;
 Em Janeiro de 1999 saiu a versão estável a
  Versão Haskel 98, que sofreu uma revisão em
  Janeiro de 2003.




                                            6/37
Influência

   Haskell foi influenciada pela Linguagem ML.




                                                  7/37
Características

 Concisa;
 Estaticamente Tipada;
 Fortemente Tipada
 Inferência de Tipo;
 Avaliação Lazy
 Gestão Automática de Memória;
 Compilada


                                  8/37
O que Precisa para Programar

 Editor de Texto;
 Compilador Haskell;
 Plataforma: http://www.haskell.org/platform/




                                            9/37
Aplicações

 Computação Simbólica;
 Processamento de Listas;
 Aplicações Cientificas;
 Jogos;
 Compiladores.




                             10/37
Primeiro Programa – Olá Mundo!




                                 11/37
Avaliação Preguiçosa

 Haskell não irá executar funções e calcular as
  coisas antes que ele seja realmente obrigado a
  lhe mostrar um resultado;
 Ex: A ordem que ocorrem as expressões não é
  especificada. Para isso, usamos o comando do




                                              12/37
Avaliação Preguiçosa




                       13/37
Inferência de Tipos

   O tipo de toda expressão é conhecido na hora da
    compilação;
   Funções também têm tipos;
   Ao declarar uma função podemos declarar seu tipo.




                                                        14/37
Comandos e Expressões

   A linguagem Haskell é baseada na avaliação de
    expressões;

   A implementação da linguagem avalia a
    expressão passada até sua forma normal.




                                               15/37
Comandos e Expressões




                        16/37
Variáveis e Objetos Imutáveis

   Haskell se fundamenta no conceito de funções,
    seus parâmetros e seus retornos;

   Não possui variáveis que mudam de valor e
    comandos de repetição baseados no teste
    sobre o valor armazenado nessas variáveis.



                                                 17/37
Listas

 Em Haskell, são estruturas de dados
  homogêneas;
 Podem ser construídas com base em dois
  construtores primitivos: [ ] e :

     [1,2,3] = 1:[2,3] = 1:2:[3] = 1:2:3:[]



                                              18/37
Listas
Exemplos




           19/37
Listas
Somando duas Listas:




                       20/37
Listas
Acessando um Elemento pelo Índice




Listas pode conter Listas




                                    21/37
Tuplas

 Não precisam ser homogêneas;
 São caracterizadas por Parênteses;
 Exemplo:




                                       22/37
Algoritmo Quicksort
                                 Se a lista é a vazia
                                 não há elementos
                                   para ordenar




                 S é o Primeiro elemento da lista
                  e é usado como Pivô, e XS é o
                         restante da Lista

                                                 23/37
Algoritmo Quicksort
                               A lista é dividida em
                              duas Partes. A primeira
                             contem os elementos XS
                              que são menores que S




              As duas listas são ordenadas
                   recursivamente.

                                                24/37
Currying de Função

 Toda função em Haskell oficialmente recebe
  apenas um parâmetro;
 Para aceitar mais de um parâmetro é
  necessário usar o Currying de Função;
 É uma técnica de avaliação parcial dos
  argumentos de uma função;



                                               25/37
Currying de Função
Exemplo:




 Colocar um espaço entre duas coisa é
  simplesmente aplicar a função;
 Essa técnica já é nativa para o Haskell.




                                             26/37
Função Fatorial sem Recursividade




                                    27/37
Função Fatorial com Recursividade




                                    28/37
Função Anônima

   É possível utilizar funções anônimas na
    definição de outras funções.

Exemplo: x -> e




                                         29/37
Função de Ordem Superior

   Funções como argumentos ou como resultado
    de outras funções;




                                           30/37
Pattern Matching

 Consiste na pesquisa por padrões em
  determinados dados e, caso tenha sucesso,
  fazer algo com o ele;
 Ao definir funções, você pode definir códigos
  específicos para cada padrão.




                                              31/37
Pattern Matching
Exemplo




                   32/37
Expressões Case




                  33/37
Classes e Objetos

 Não tem o conceito de Objeto;
 E as classes funcionam como um Tipo de Dado
  Abstrato;
 Coleção de tipos que suportam operações
  comuns;
 A definição de um classe consiste em:




                                           34/37
Classes Básicas em Haskell

   Eq: tipos com igualdade
   Ord: tipos ordenados
   Show: tipos mostráveis
   Read: tipos legíveis
   Num: tipos numéricos



                              35/37
O papel das classes em Haskell

   Sobrecarga
   Um único nome indica muitas funções;
   (+) engloba adição de inteiros e de reais.

   Parametrização Implícita
 Quando instanciamos um tipo nosso como derivado de
  uma classe, herdamos a assinatura definida por seus
  métodos;
 Todos os (+) tem de ter assinatura a->a->a
 A instanciação pode ser parcial


                                                        36/37
Obrigada!


            37/37

Weitere ähnliche Inhalte

Andere mochten auch (20)

Presentación GBI corte 2
Presentación GBI corte 2Presentación GBI corte 2
Presentación GBI corte 2
 
Coder-Dojo-A5
Coder-Dojo-A5Coder-Dojo-A5
Coder-Dojo-A5
 
Photo collage
Photo collagePhoto collage
Photo collage
 
new title
new titlenew title
new title
 
CV B2
CV B2CV B2
CV B2
 
Turma 400 Em...O Mestre dos Jogos
Turma 400 Em...O Mestre dos JogosTurma 400 Em...O Mestre dos Jogos
Turma 400 Em...O Mestre dos Jogos
 
Presentacion de marta (1) power
Presentacion de marta (1) powerPresentacion de marta (1) power
Presentacion de marta (1) power
 
Recesso
RecessoRecesso
Recesso
 
Apresentação Oficial Telnac Global
Apresentação Oficial Telnac GlobalApresentação Oficial Telnac Global
Apresentação Oficial Telnac Global
 
Mind map 2
Mind map 2Mind map 2
Mind map 2
 
LOR Boat America
LOR Boat AmericaLOR Boat America
LOR Boat America
 
RAJAN_14055.PDF
RAJAN_14055.PDFRAJAN_14055.PDF
RAJAN_14055.PDF
 
Facebook grupos e listas
Facebook grupos e listasFacebook grupos e listas
Facebook grupos e listas
 
new title
new titlenew title
new title
 
Test
TestTest
Test
 
Presentación del Reglamento Estudiantil UPC
Presentación del Reglamento Estudiantil UPCPresentación del Reglamento Estudiantil UPC
Presentación del Reglamento Estudiantil UPC
 
Moção de candidatura
Moção de candidaturaMoção de candidatura
Moção de candidatura
 
Modelo propostas
Modelo propostasModelo propostas
Modelo propostas
 
IVAN CRUZ
IVAN CRUZIVAN CRUZ
IVAN CRUZ
 
Sistema solar
Sistema solarSistema solar
Sistema solar
 

Ähnlich wie Introdução à Linguagem Funcional Haskell

Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskellDaniel Farias
 
Seminario haskell
Seminario haskellSeminario haskell
Seminario haskellRenzo Petri
 
5 paradigma funcional usando haskell
5 paradigma funcional usando haskell5 paradigma funcional usando haskell
5 paradigma funcional usando haskellPéricles Miranda
 
Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10Ismar Silveira
 
Aulas 13 e 14 - Algoritmos
Aulas 13 e 14 - AlgoritmosAulas 13 e 14 - Algoritmos
Aulas 13 e 14 - AlgoritmosJocelma Rios
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalLP Maquinas
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação FuncionalNatan Mai
 

Ähnlich wie Introdução à Linguagem Funcional Haskell (12)

Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskell
 
Haskell
HaskellHaskell
Haskell
 
Seminario haskell
Seminario haskellSeminario haskell
Seminario haskell
 
5 paradigma funcional usando haskell
5 paradigma funcional usando haskell5 paradigma funcional usando haskell
5 paradigma funcional usando haskell
 
Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10
 
Aulas 13 e 14 - Algoritmos
Aulas 13 e 14 - AlgoritmosAulas 13 e 14 - Algoritmos
Aulas 13 e 14 - Algoritmos
 
Haskell
HaskellHaskell
Haskell
 
Curso ruby on rails
Curso ruby on railsCurso ruby on rails
Curso ruby on rails
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Haskell motivação
Haskell motivaçãoHaskell motivação
Haskell motivação
 

Introdução à Linguagem Funcional Haskell

  • 1. Seminário PLP Linguagem Funcional Haskell Daniele Montenegro Joice Taciana
  • 2. Agenda  De onde vem o Nome;  O que é Haskell;  Um pouco da História;  Características;  O que precisa para Programar;  Aplicações;  Primeiro Programa – Olá Mundo; 2/37
  • 3. Agenda  Avaliação Preguiçosa  Inferência de Tipos  Comandos e Expressões  Listas  Tuplas  Funções  Classes 3/37
  • 4. De onde vem o Nome  Do matemático Haskell B. Curry, conhecido por seu trabalho em lógica combinatória. 4/37
  • 5. O que é Haskell  É uma linguagem de programação puramente funcional.  Baseada no lambda-calculus, que surgiu nos anos 80;  Open Souce. 5/37
  • 6. Um pouco da História  Foi desenvolvida por um Comitê, que se reuniu a primeira vez em 1988;  A primeira versão saiu em 1990;  Em Janeiro de 1999 saiu a versão estável a Versão Haskel 98, que sofreu uma revisão em Janeiro de 2003. 6/37
  • 7. Influência  Haskell foi influenciada pela Linguagem ML. 7/37
  • 8. Características  Concisa;  Estaticamente Tipada;  Fortemente Tipada  Inferência de Tipo;  Avaliação Lazy  Gestão Automática de Memória;  Compilada 8/37
  • 9. O que Precisa para Programar  Editor de Texto;  Compilador Haskell;  Plataforma: http://www.haskell.org/platform/ 9/37
  • 10. Aplicações  Computação Simbólica;  Processamento de Listas;  Aplicações Cientificas;  Jogos;  Compiladores. 10/37
  • 11. Primeiro Programa – Olá Mundo! 11/37
  • 12. Avaliação Preguiçosa  Haskell não irá executar funções e calcular as coisas antes que ele seja realmente obrigado a lhe mostrar um resultado;  Ex: A ordem que ocorrem as expressões não é especificada. Para isso, usamos o comando do 12/37
  • 14. Inferência de Tipos  O tipo de toda expressão é conhecido na hora da compilação;  Funções também têm tipos;  Ao declarar uma função podemos declarar seu tipo. 14/37
  • 15. Comandos e Expressões  A linguagem Haskell é baseada na avaliação de expressões;  A implementação da linguagem avalia a expressão passada até sua forma normal. 15/37
  • 17. Variáveis e Objetos Imutáveis  Haskell se fundamenta no conceito de funções, seus parâmetros e seus retornos;  Não possui variáveis que mudam de valor e comandos de repetição baseados no teste sobre o valor armazenado nessas variáveis. 17/37
  • 18. Listas  Em Haskell, são estruturas de dados homogêneas;  Podem ser construídas com base em dois construtores primitivos: [ ] e : [1,2,3] = 1:[2,3] = 1:2:[3] = 1:2:3:[] 18/37
  • 21. Listas Acessando um Elemento pelo Índice Listas pode conter Listas 21/37
  • 22. Tuplas  Não precisam ser homogêneas;  São caracterizadas por Parênteses;  Exemplo: 22/37
  • 23. Algoritmo Quicksort Se a lista é a vazia não há elementos para ordenar S é o Primeiro elemento da lista e é usado como Pivô, e XS é o restante da Lista 23/37
  • 24. Algoritmo Quicksort A lista é dividida em duas Partes. A primeira contem os elementos XS que são menores que S As duas listas são ordenadas recursivamente. 24/37
  • 25. Currying de Função  Toda função em Haskell oficialmente recebe apenas um parâmetro;  Para aceitar mais de um parâmetro é necessário usar o Currying de Função;  É uma técnica de avaliação parcial dos argumentos de uma função; 25/37
  • 26. Currying de Função Exemplo:  Colocar um espaço entre duas coisa é simplesmente aplicar a função;  Essa técnica já é nativa para o Haskell. 26/37
  • 27. Função Fatorial sem Recursividade 27/37
  • 28. Função Fatorial com Recursividade 28/37
  • 29. Função Anônima  É possível utilizar funções anônimas na definição de outras funções. Exemplo: x -> e 29/37
  • 30. Função de Ordem Superior  Funções como argumentos ou como resultado de outras funções; 30/37
  • 31. Pattern Matching  Consiste na pesquisa por padrões em determinados dados e, caso tenha sucesso, fazer algo com o ele;  Ao definir funções, você pode definir códigos específicos para cada padrão. 31/37
  • 34. Classes e Objetos  Não tem o conceito de Objeto;  E as classes funcionam como um Tipo de Dado Abstrato;  Coleção de tipos que suportam operações comuns;  A definição de um classe consiste em: 34/37
  • 35. Classes Básicas em Haskell  Eq: tipos com igualdade  Ord: tipos ordenados  Show: tipos mostráveis  Read: tipos legíveis  Num: tipos numéricos 35/37
  • 36. O papel das classes em Haskell  Sobrecarga  Um único nome indica muitas funções;  (+) engloba adição de inteiros e de reais.  Parametrização Implícita  Quando instanciamos um tipo nosso como derivado de uma classe, herdamos a assinatura definida por seus métodos;  Todos os (+) tem de ter assinatura a->a->a  A instanciação pode ser parcial 36/37
  • 37. Obrigada! 37/37