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

Post on 25-Sep-2018

220 views 0 download

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

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