37
Seminário PLP Linguagem Funcional Haskell Daniele Montenegro Joice Taciana

Haskell

Embed Size (px)

Citation preview

Page 1: Haskell

Seminário PLPLinguagem Funcional Haskell

Daniele Montenegro

Joice Taciana

Page 2: Haskell

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

Page 3: Haskell

Agenda

Avaliação Preguiçosa

Inferência de Tipos

Comandos e Expressões

Listas

Tuplas

Funções

Classes

3/37

Page 4: Haskell

De onde vem o Nome

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

4/37

Page 5: Haskell

O que é Haskell

É uma linguagem de programação puramente funcional.

Baseada no lambda-calculus, que surgiu nos anos 80;

Open Souce.

5/37

Page 6: Haskell

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 emJaneiro de 2003.

6/37

Page 7: Haskell

Influência

Haskell foi influenciada pela Linguagem ML.

7/37

Page 8: Haskell

Características

Concisa;

Estaticamente Tipada;

Fortemente Tipada

Inferência de Tipo;

Avaliação Lazy

Gestão Automática de Memória;

Compilada

8/37

Page 9: Haskell

O que Precisa para Programar

Editor de Texto;

Compilador Haskell;

Plataforma: http://www.haskell.org/platform/

9/37

Page 10: Haskell

Aplicações

Computação Simbólica;

Processamento de Listas;

Aplicações Cientificas;

Jogos;

Compiladores.

10/37

Page 11: Haskell

Primeiro Programa – Olá Mundo!

11/37

Page 12: Haskell

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

Page 13: Haskell

Avaliação Preguiçosa

13/37

Page 14: Haskell

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

Page 15: Haskell

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

Page 16: Haskell

Comandos e Expressões

16/37

Page 17: Haskell

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

Page 18: Haskell

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

Page 19: Haskell

Listas

Exemplos

19/37

Page 20: Haskell

Listas

Somando duas Listas:

20/37

Page 21: Haskell

Listas

Acessando um Elemento pelo Índice

Listas pode conter Listas

21/37

Page 22: Haskell

Tuplas

Não precisam ser homogêneas;

São caracterizadas por Parênteses;

Exemplo:

22/37

Page 23: Haskell

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

Page 24: Haskell

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

Page 25: Haskell

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

Page 26: Haskell

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

Page 27: Haskell

Função Fatorial sem Recursividade

27/37

Page 28: Haskell

Função Fatorial com Recursividade

28/37

Page 29: Haskell

Função Anônima

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

Exemplo: \x -> e

29/37

Page 30: Haskell

Função de Ordem Superior

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

30/37

Page 31: Haskell

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

Page 32: Haskell

Pattern Matching

Exemplo

32/37

Page 33: Haskell

Expressões Case

33/37

Page 34: Haskell

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

Page 35: Haskell

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

Page 36: Haskell

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ícitaQuando 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

Page 37: Haskell

Obrigada!

37/37