Haskell

Preview:

Citation preview

Seminário PLPLinguagem 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 emJaneiro 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 nadefiniçã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í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

Obrigada!

37/37

Recommended