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