1 / 37

Linguagem Haskell

Linguagem Haskell. Riocemar S. de Santana . 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 ).

brad
Download Presentation

Linguagem Haskell

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linguagem Haskell Riocemar S. de Santana

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

  3. 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#

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

  5. Linguagem Haskell Exemplo • 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.

  6. Linguagem Haskell Exemplo • A soma dos números inteiros de 1 a 10 em linguagem Haskell pode ser feita como: >sum[1..10] • O método da computação é baseado em aplicação de argumentos à funções.

  7. WinHugs

  8. WinHugs • Hugs é uma implementação da linguagem Haskell que pode ser executada em PCse sistemas Unix, incluindo Linux. • Pode ser obtido gratuitamente emhttp://cvs.haskell.org/Hugs/pages/downloading.htm

  9. WinHugs Suporte para: • Microsoft Windows • DebianGNU/Linux • Fedora Core (Linux) • OpenSUSE(Linux) • FreeBSD • Mac OS X

  10. Haskell – Função • Uma função pode ser representada da seguinte maneira: • A partir dos valores de entrada á obtido o valor de saída.

  11. Haskell – Função • Funções em Haskell são normalmente definidas pelo uso de equações. • Por exemplo, a função soma pode ser escrita: soma x y = x + y • Chamada da seguinte maneira: >soma 10 20 30

  12. Haskell – Função • A função soma pode ser implementada em um arquivo (bloco de notas) e salvo com a extensão .hs

  13. Haskell – Função • Carregando o arquivo de funções: Hugs>:load ”caminho”

  14. Haskell – Função • Chamando a função soma: Main>soma 10 2

  15. Haskell – Função • Incluindo mais funções no arquivo: incrementa n = n + 1

  16. Haskell – Função • Função que chama uma função:

  17. Hugs Alguns comandos importantes:

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

  19. Tipos primitivos em Haskell • Para definir que uma expressão E tem o tipo T (E é do tipo T) escreve-se E::T-> Saida

  20. Prototipação de tipos Exemplos: • -- Função que verifica se um número inteiro é par. par::Int->Bool par x = if mod x 2 == 0 thenTrue elseFalse • -- Função para converter um valor Fahrenheit em Celsius converteFC::Float->Float converteFCx = (x - 32)/ 1.8

  21. Prototipação de tipos • Tipo Booleano: • O tipo booleano é representado pela abreviatura Bool e possui os valores: Trueou False. • Tipo Inteiro: • Os inteiros são referenciados por Int, o domínio matemático dos inteiros (até 2147483647).

  22. Funções do módulo Prelude O 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

  23. Funções do módulo Prelude (Cont...) • 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

  24. 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 tuplapodemos combinar os componentes de um dado numa única estrutura, e os componentes podem ter tipos e propriedades distintas

  25. Listas Fundamento • 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.

  26. Listas Fundamento • 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“

  27. Listas Operador (:) • 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]

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

  29. 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]

  30. 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]

  31. 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*ndos elementos n contidos em L1 = [2,4,7].

  32. 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,361,400,441,484,529,576,625,676,7 29,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,361,400,441,484,529,576,625,676,7 29,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600 ... > elem 4 listaQuadInf True • A função elem verifica se um elemento pertence a uma lista. Retorna True ou False

  33. Listas Funções Pré-definidas

  34. Listas Funções Pré-definidas

  35. Listas Funções Pré-definidas

  36. Listas Funções Pré-definidas

  37. 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/Aula14.pdf Fim.

More Related