Haskell
-
Upload
daniele-montenegro -
Category
Documents
-
view
547 -
download
3
Transcript of Haskell
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