Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando...

35
1 Linguagem Haskell Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação Tiago Carneiro 19 Agosto 2013 1

Transcript of Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando...

Page 1: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

1

Linguagem Haskell

Universidade Estadual Santa CruzConceitos de Linguagens de

Programação

Tiago Carneiro19 Agosto 2013

1

Page 2: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 3: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 4: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 5: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

5

Imperativa x Funcional

Funcional

Sum [ 1 .. 10]

O método da computação é baseado em aplicação de argumentos à funções

Page 6: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 7: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

7

Imperativa x Funcional

Imperativa :

– Variável →Célula de memória

– Statement →Transição de estado

– Estruturas de controle

Page 8: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

8

Programação FuncionalFuncional:

Nao existe a noção de estado

Nao existe comando de atribuição

Nao existem variaveis

Page 9: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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.

Page 10: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 11: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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.

Page 12: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 13: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 14: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

14

WinHugs

Page 15: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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.

Page 16: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 17: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

17

Haskell – Função

Page 18: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 19: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 20: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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)

Page 21: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 22: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

22

Recursão

● fatorial::Int-> Int● fatorial 0 = 1● fatorial n = n * fatorial(n-1)

Page 23: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 24: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 25: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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”

Page 26: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

26

Operadores

> Maior que

< Menor que

> = Maior ou igual

< = Menor ou igual

== Igual

/= Diferente

&& &

|| OU

not Negação

Page 27: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 28: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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)

Page 29: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 30: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 31: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 32: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 33: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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

Page 34: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

34

Condicionais: if-then-else

DoubleSmall 2

2

doubleSmall 200

400

Page 35: Linguagem Haskell - ppgsc.ufrn.brrogerio/material_auxiliar/CLP20132_introducao... · Comando Significado:load “arq.ext” Carrega o arquivo:reload Recarrega o arquivo:edit “arq.txt”

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