1
Linguagem Haskell
Universidade Estadual Santa CruzConceitos de Linguagens de
Programação
Tiago Carneiro19 Agosto 2013
1
2
Linguagem Haskell
•Linguagem de programação funcional
•É um paradigma de programação que trata a computação como avaliação de funções matemáticas.
2
3
Programa funcional é uma função que resolve um problema.
O programa funcional é uma única expressao, que é executado através da avaliação da expressão .
Programação Funcional
4
A idéia básica é computar argumentos por meio de função.
um programa é um conjunto de definições de funções que são aplicadas a valores.
O resultado da função é a resolução do problema.
Ex: Scheme, ML, O’Caml, Haskell, F#
Programação Funcional
5
Imperativa x Funcional
Funcional
Sum [ 1 .. 10]
O método da computação é baseado em aplicação de argumentos à funções
6
Programação Imperativa
O programa é uma sequência de instruções que mudam células na memória.
Comandos que mudam o estado (variáveis) de um programa
7
Imperativa x Funcional
Imperativa :
– Variável →Célula de memória
– Statement →Transição de estado
– Estruturas de controle
8
Programação FuncionalFuncional:
Nao existe a noção de estado
Nao existe comando de atribuição
Nao existem variaveis
9
Imperativa x Funcional
Soma de todos inteiros de 1 a 10
Imperativa: Int soma=0; for(i=1;i<=10;i++){ soma+=i; }
O método da computação é baseado em atribuição de valores à variáveis.
10
Linguagem Haskell – História
Nome em homenagem ao matemático Haskell B. Curry
Foi desenvolvida por um Comitê, que se reuniu a primeira vez em 1988;
Objetivo de construir uma linguagem funcional de programação padronizada com uma semântica não-rígida
11
Linguagem Haskell – História
A primeira versão saiu em 1990;
Em Janeiro de 1999 saiu a versão estável a Versão Haskel 98
Implementações abertas e livremente disponíveis.
12
Linguagem Haskell - CaracterísticasProgramas concisosFácil compreensãoTipagem estática e implícitaCompreensões de listaFunções recursivasAvaliação lazyGestão automática de memóriaTransparência ReferencialAlta portabilidade
13
Linguagem Haskell - Ferramenta
O interpretador HugsInterpretador de expressões escritas na linguagem Haskell. Software livre e fácil de ser obtidoEscrito em CÉ portávelIdeal para iniciantes
14
WinHugs
15
WinHugs
Utilizando scripts Haskell no Hugs
Problemas maiores expressões são inviáveis de se escrever diretamente no prompt no Hugs.
Ao invés disso, escreve-se um script em Haskell e o grava em um arquivo texto separadamente.
16
WinHugs
Comando Significado
:load “arq.ext” Carrega o arquivo
:reload Recarrega o arquivo
:edit “arq.txt” Edita o aquivo pedido
:type expr Mostra o tipo de uma expressão
:? Mostra todos os comandos
:quit Encerra o hugs
17
Haskell – Função
18
Haskell – Função
Funções em Haskell são normalmentedefinidas pelo uso de equações
soma x y = x + yChamada da seguinte maneira: >soma 10 20 30
19
Haskell – Função
● As declarações de tipos de função em haskell podem ser feitas por meio de uma sequencia de equações
● EX:● X:: int - > int - > int● X é o nome da função● Os tipos do meio são argumentos da função● O último tipo é sempre o tipo de dado a ser retornado
Ex: add :: int - > int - > int ● Add xy = x+y
20
Haskell – Função
Matematicamente Heskell
f(x) F x
f(x,y) F x y
f(g(x) f(g x)
f(x, g(y) F x (g y)
21
Recursão
● Forma de definir funções que fazem chamada a si própria● Regras: ● - Ter condição de parada ● - Tornar o problema mais simples
22
Recursão
● fatorial::Int-> Int● fatorial 0 = 1● fatorial n = n * fatorial(n-1)
23
Funções definidas
even - verifica se um valor dado é par
odd - verifica se um valor dado é impar
rem - resto da divisão inteira
mod - resto da divisão inteira
ceiling - arredondamento para cima
floor - arredondamento para baixo
round - arredondamento para cima e para baixo
truncate - parte inteira do número
fromIntegral - converte um inteiro em real
sin - seno de ângulo em radianos
cos - cosseno
tan – tangente
24
Funções definidas
asin - arco seno
acos - arco cosseno
atan - arco tangente
atan - arco tangente
abs - valor absoluto
sqrt - raiz quadrada, valor positivo apenas
exp - exponencial base e
log - logaritmo natural (base e)
logBase - logaritmo na base dada
min - menor de 2 objetos dados
max - maior de 2 objetos dados
25
Tipos de Dados
Bool (booleano) True False
Int 3,4,5,6
Integer 2313131123,
Float 5.50, 3e-9
Double 12345.567890
Char 'a', 'b', 'c'
String “haskell”
26
Operadores
> Maior que
< Menor que
> = Maior ou igual
< = Menor ou igual
== Igual
/= Diferente
&& &
|| OU
not Negação
27
Operadores
+ Soma
- Subtracao
* Multiplicação
^ Potencia
div Divisao inteira
mod Resto da divisao
abs Absoluto de um inteiro
negate Troca o sinal do valor
not Negação
28
Listas
Conjunto de dados de um mesmo tipo
Exemplos
[1,2,3,4] (lista de inteiros)
['a', 'b', 'c'] (igual a "abc")
[] (lista vazia)
[[1,2], [3,4]] (lista aninhada)
29
Listas
Uma lista é composta sempre de dois segmentos: cabeça (head) e corpo (tail)
O símbolo (:) é o operador de construção de listas
Pode-se definir uma lista indicando os limites inferior e superior de um conjunto conhecido, onde existe uma relação de ordem entre os elementos, no seguinte formato:
['a'..'d']
30
Operações com listas
● Head: Retorna o primeiro elemento da lista
- head [1,2,3,4]
1
Tail: Retorna a calda da lista, ou seja, a lista sem o primeiro elemento
-tail [1,2,3,4]
2 3 4
31
Operações com listas
● Init: Retorna todos os elementos menos o ultimo
- init [1,2,3,4]
1 2 3
Last: Retorna o ultimo elemento
- last [4]
4
32
Operações com listas
● Length : Retorna o tamanho da lista
- length [5,4,3,2,1]
5
Reverse: Inverte os elementos da lista
Reverse [5,4,3,2,1]
[1,2,3,4,5]
Elem: Verifica se um elemento esta na lista
Elem 10 [ 1,2,3,4,5]
false
33
Condicionais: if-then-else
doubleSmall :: Int -> Int
doubleSmall x = if x > 100
then x
else x*2
Se for menor ele retorna o parametro
Senao multiplica por 2
34
Condicionais: if-then-else
DoubleSmall 2
2
doubleSmall 200
400
35
Referencias
● Www.haskell.org● http://pt.wikipedia.org/wiki/Haskell● http://www-usr.inf.ufsm.br/~andrea/elc117/slides/slides-haske
ll-intro-2013a.pdf● http://www.haskell.org/haskellwiki/Haskell_em_10_minutos