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

Haskell

  • 1.
    Seminário PLP Linguagem FuncionalHaskell Daniele Montenegro Joice Taciana
  • 2.
    Agenda  De ondevem 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 vemo 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 daHistó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;  EstaticamenteTipada;  Fortemente Tipada  Inferência de Tipo;  Avaliação Lazy  Gestão Automática de Memória;  Compilada 8/37
  • 9.
    O que Precisapara 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  Haskellnã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
  • 13.
  • 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
  • 16.
  • 17.
    Variáveis e ObjetosImutá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
  • 19.
  • 20.
  • 21.
    Listas Acessando um Elementopelo Índice Listas pode conter Listas 21/37
  • 22.
    Tuplas  Não precisamser 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 semRecursividade 27/37
  • 28.
    Função Fatorial comRecursividade 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 OrdemSuperior  Funções como argumentos ou como resultado de outras funções; 30/37
  • 31.
    Pattern Matching  Consistena 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
  • 32.
  • 33.
  • 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 emHaskell  Eq: tipos com igualdade  Ord: tipos ordenados  Show: tipos mostráveis  Read: tipos legíveis  Num: tipos numéricos 35/37
  • 36.
    O papel dasclasses 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.