linguagem haskell riocemar s. de santana. haskell, o que é? É uma linguagem de programação...

37
Linguagem Haskell Riocemar S. de Santana

Upload: internet

Post on 18-Apr-2015

117 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Linguagem HaskellRiocemar S. de Santana

Page 2: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Haskell, o que é?

É uma linguagem de programação puramente funcional, de

propósito geral.

Nomeada em homenagem ao matemático americano Haskell

B. Curry (1900–1982).

Concebida para ensino e também para o desenvolvimento de

aplicações reais.

Resultado de mais de vinte anos de investigação por uma

comunidade de base acadêmica muito ativa.

Implementações abertas e livremente disponíveis.

Como uma linguagem funcional, a estrutura de controle

primária é a função.

Page 3: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

O que é a programação funcional?

É um paradigma de programação.

No paradigma imperativo, um programa é uma

sequência de instruções que mudam células na memória.

No paradigma funcional, um programa é um conjunto

de definições de funções que são aplicadas a valores.

Podemos programar num estilo funcional em muitas

linguagens.

Exemplos: Scheme, ML, O’Caml, Haskell, F#

Page 4: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Programação Funcional

A programação funcional modela um problema computacional como uma coleção de funções matemáticas, cada uma com um domínio de entrada e um resultado.

As funções interagem e combinam entre si usando composição funcional, condições e recursão.

Page 5: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Linguagem HaskellExemplo

Para somar os números inteiros de 1 a 10 podemos escrever em linguagem C:

int total = 0, i;for (i = 1; i <= 10; i++){

total = total + i;}

O método da computação é baseado em atribuição de valores à variáveis.

Page 6: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Linguagem HaskellExemplo

A soma dos números inteiros de 1 a 10 emlinguagem Haskell pode ser feita como:

>sum[1..10]

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

Page 7: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

WinHugs

Page 8: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

WinHugs

Hugs é uma implementação da linguagem Haskell que pode ser executada em PCs e sistemas Unix, incluindo Linux.

Pode ser obtido gratuitamente em http://cvs.haskell.org/Hugs/pages/downloading.htm

Page 9: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

WinHugsSuporte para:

Microsoft Windows

Debian GNU/Linux

Fedora Core (Linux)

OpenSUSE (Linux)

FreeBSD

Mac OS X

Page 10: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Haskell – Função

Uma função pode ser representada daseguinte maneira:

A partir dos valores de entrada á obtido ovalor de saída.

Page 11: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Haskell – Função

Funções em Haskell são normalmentedefinidas pelo uso de equações.Por exemplo, a função soma pode ser escrita:

soma x y = x + yChamada da seguinte maneira: >soma 10 20 30

Page 12: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Haskell – Função

A função soma pode ser implementada emum arquivo (bloco de notas) e salvo com aextensão .hs

Page 13: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Haskell – Função

Carregando o arquivo de funções:Hugs>:load ”caminho”

Page 14: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Haskell – Função

Chamando a função soma: Main>soma 10 2

Page 15: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Haskell – Função

Incluindo mais funções no arquivo:incrementa n = n + 1

Page 16: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Haskell – Função

Função que chama uma função:

Page 17: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Hugs Alguns comandos importantes:

Page 18: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Tipos básicos

A linguagem Haskell possui uma disciplina rigorosa de tipos de dados, sendo fortemente tipada. Neste caso, toda função, variável, constante tem apenas um tipo de dado, que sempre pode ser determinado.

Embora fortemente tipada, a linguagem Haskell possui um sistema de dedução automática de tipos para funções cujos tipos não foram definidos.

A partir dos tipos pré-definidos na linguagem Haskell, novos tipos podem ser construídos pelo programador.

Page 19: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Tipos primitivos em Haskell

Para definir que uma expressão E tem o tipo T (E é do tipo T) escreve-se

E ::T-> Saida

Page 20: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Prototipação de tiposExemplos:

-- Função que verifica se um número inteiro é par.par::Int->Bool

par x = if mod x 2 == 0 then True else False

-- Função para converter um valor Fahrenheit em Celsius

converteFC::Float->FloatconverteFC x = (x - 32)/ 1.8

Page 21: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Prototipação de tipos

Tipo Booleano:◦ O tipo booleano é representado pela abreviatura Bool epossui os valores: True ou False.

Tipo Inteiro:◦ Os inteiros são referenciados por Int, o domínio matemático

dos inteiros (até 2147483647).

Page 22: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Funções do módulo PreludeO arquivo de biblioteca Prelude.hs oferece um grande número

de funções definidas no padrão da linguagem através do módulo Prelude.

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 23: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Funções do módulo Prelude(Cont...)

asin - arco senoacos - arco cossenoatan - arco tangente atan - arco tangenteabs - valor absolutosqrt - raiz quadrada, valor positivo apenasexp - exponencial base elog - logaritmo natural (base e)logBase - logaritmo na base dadamin - menor de 2 objetos dadosmax - maior de 2 objetos dados

Page 24: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Listas e Tuplas

A linguagem Haskell nos fornece dois mecanismos para a construção de dados compostos: listas e tuplas.

A lista possibilita a união de vários elementos – todos do mesmo tipo - numa única estrutura.

Numa tupla podemos combinar os componentes de um dado numa única estrutura, e os componentes podem ter tipos e propriedades distintas

Page 25: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

ListasFundamento

Uma lista é uma estrutura de dados que representa uma coleção de objetos homogêneos em sequência.

Para alcançar qualquer elemento, todos os anteriores a ele devem ser recuperados.

Em programação, uma lista vazia (representada por [ ] em Haskell) é a estrutura base da existência de uma lista.

Page 26: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

ListasFundamento

Uma lista é composta sempre de dois segmentos: cabeça (head) e corpo (tail). A cabeça da lista é sempre o primeiro elemento.

['a','b','c','d']"abcd"> 'a':['b','c','d']"abcd“

Page 27: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

ListasOperador (:)

O símbolo (:) é o operador de construção de listas. Toda lista é construída através deste operador. Exemplos:

Hugs> 'a':['b','c','d']"abcd"Hugs> 2:[4,6,8][2,4,6,8]

Page 28: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Listas

Hugs> 'a':['b','c','d']"abcd"Hugs> 1:[2,3][1,2,3]Hugs> ['a','c','f'] == 'a':['c','f'] TrueHugs> [1,2,3] == 1:2:3:[]TrueHugs> 1:[2,3] == 1:2:[3]TrueHugs> "papel" == 'p':['a','p','e','l']True

Page 29: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

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

[ <limite-inferior> .. <limite-superior> ]> [1..4][1,2,3,4]> ['m'..'n']"mn"> [1,3..6][1,3,5]> ['a','d'..'p']"adgjmp"> [3.1..7][3.1,4.1,5.1,6.1,7.1]

Page 30: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Escrevendo Listas

Podemos definir qualquer progressão aritmética em uma lista utilizando a seguinte notação:

[ <1o. termo>, <2o. termo> .. <limite-superior> ]

> [7,6..3][7,6,5,4,3]> [6,5..0][6,5,4,3,2,1,0]> [-5,2..16][-5,2,9,16]> [5,6..5][5]> [1,1.1 .. 2][1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0]

Page 31: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Listas por compreensão

A descrição de uma lista pode ser feita em termos dos elementos de uma outra lista. Por exemplo, temos a lista L1 = [2,4,7].

Uma lista definida por compreensão pode ser escrita:

> [ 2 * n | n <- L1 ][4,8,14]

A lista resultante contém todos os elementos da lista L1, multiplicados por 2. Assim, podemos ler: Obtenha todos os 2*n dos elementos n contidos em L1 = [2,4,7].

Page 32: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Listas por compreensão

Exemplo:listaQuad = [x^2 | x <- [1..30]]>listaQuad[1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,36

1,400,441,484,529,576,625,676,729,784,841,900]

listaQuadInf = [ x^2 | x <- [1..] ]> listaQuadInf[1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,36

1,400,441,484,529,576,625,676,729,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1

600 ...

> elem 4 listaQuadInfTrue

A função elem verifica se um elemento pertence a uma lista. Retorna True ou False

Page 33: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

ListasFunções Pré-definidas

Page 34: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

ListasFunções Pré-definidas

Page 35: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

ListasFunções Pré-definidas

Page 36: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

ListasFunções Pré-definidas

Page 37: Linguagem Haskell Riocemar S. de Santana. Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem

Fim.

Referências◦ http://www-usr.inf.ufsm.br/~juvizzotto/elc117-2010b/

◦ http://pt.wikipedia.org

◦ http://www2.fct.unesp.br/docentes/dmec/olivete/lp/arquivos/Aul

a14.pdf