Introdução a Linguagemde Programação Haskell          Bruno Rafael          Emanuel Franco          Iorgama Porcely       ...
Tópicos Introdução a Haskell Tipos de dados Operadores Criando funções Recursão Pattern Matching Guards Listas Tu...
O que é Haskell? Linguagem       de   programação   puramente  funcional. Variáveis    imutáveis; Expressões   em forma...
O que é Haskell? Inicialmenteessa forma pode ser visto como  uma limitação, porém: Quando   uma função é chamada duas ve...
Transparência referencial Permite        que o compilador raciocine sobre o comportamento do programa; Permiteque você d...
Haskell é preguiçoso Não irá executar funções e calcular as coisas  antes que ele seja realmente obrigado a lhe  mostrar ...
Exemplo Temos    a seguinte lista de números imutável: xs   = [1,2,3,4,5,6,7,8] Função  DoubleMe (Multiplica cada eleme...
Na linguagem imperativa Fazendo:   doubleMe (doubleMe (doubleMe (xs ))) Provavelmente  iria passar uma vez pela lista, f...
Na linguagem preguiçosa Fazendo:     doubleMe (doubleMe (doubleMe (xs )))A função será executada para o primeiro element...
Haskell é estaticamente tipadaO   compilador saberá no código o que é um  número, o que é uma string e assim por  diante....
Inferência de Tipo Não   é necessário explicitamente identificar  cada pedaço de código com um tipo; O sistema de tipos ...
Elegante e Conciso Utiliza        uma série de conceitos de alto nível; Programas Haskell são normalmente mais  curtos d...
Feito por caras realmenteinteligentes   O trabalho sobre Haskell    começou em 1987 quando    uma comissão de    pesquisa...
O que preciso para começar? Interpretador HUGS  http://cvs.haskell.org/Hugs/pages/downloadin  g.htm Compilador GHC  http...
HUGS – Primeiros comandos :quit   - Sai do Hugs :?   - Exibe a ajuda do Hugs :load <caminho_do_arquivo> - Carrega um  a...
Operações Pode-se utilizar todos operadores comuns em uma só linha e todas suas regras usuais precedentes serão obedecidas.
Operações Podemos  utilizar parênteses para declarar de forma explicita a operação precedente ou para mudá-la
Operações Sevocê quiser obter números negativos, sempre tenha a operação determinada por parênteses. Fazendo 5 * -3 o GHC...
Operações Booleanas Onde    && refere-se     a     expressão booleana and, ||refere-se a expressão booleana or. not faz  ...
Testes de igualdades Vejamos alguns testes com operadores de igualdade:
Operadores para inteiros Além   dos operadores convencionais temos:    ^ : para cálculos de Potência.ghci> 2 ^ 416ghci> 4...
Funções para Inteiros div   : divisão de númerosghci> div 4 22 mod:    resto da divisãoghci> mod 10 31
Funções para Inteiros succ   : retorna sucessorghci> succ 89 negate:   muda sinal do númeroghci> negate 10-10
Funções para Inteiros mim   : retorna menor valor ghci> mim 9 10 9 max:   retorna maior valor ghci> max 100 101 101
Funções para Inteiros Fuções   podem      ser    escritas   como operadores, e vice-versa:ghci> 4 `div` 22ghci> (+) 4 26
Funções para Inteiros As funções tem precedencia sobre as operações, como podemos ver abaixo: As   duas expressões são e...
Tipos e Funções para Float Os    mesmos dos inteiros, com mais alguns: **   : Exponenciação; cos,   sin, tag: Coseno, S...
Tipos e Funções para Float sqrt:   raiz quadrada;ghci> sqrt 164.0 pi:   Constante pi;ghci> 2 * pi6.28318530717959
Fazendo sua própria função Vamos agora fazer nossa primeira função. No editor de texto escreva:   doubleMe x = x + x Salv...
Fazendo sua própria função Indoao local onde o arquivo foi salvo  execute os seguintes passos:ghci> :1 baby  [1 of 1] Com...
Recursão Forma de definir funções   que   fazem chamadas a si próprias.
Recursão Forma   de definir funções            que   fazem  chamadas a si próprias. Regras:  –   Ter condição de parada....
Recursão Fatorial:  - Condição de parada: fatorial 0 = 1.  - Ex: 3!        = 3 * 2!        = 2 * 1!        = 1 * 0!      ...
Recursão Fatorial:  - Condição de parada: fatorial 0 = 1.  - Ex: 3!        = 3 * 2!        = 2 * 1!        = 1 * 0!      ...
Recursão fatorial.hs Terminal ghci.
Recursão Fibonacci:    - Condição Limite:          F(0) = 0.          F(1) = 1.    - F(n) = F(n – 1) + F(n - 2)
Recursão Fibonacci:    - EX: F(3)    F(3) = F(2) + F(1)    F(2) = F(1) + F(0)    F(1) = 1    F(0) = 0
Recursão Fibonacci:    - EX: F(3)    F(3) = F(2) + F(1)    F(2) = F(1) + F(0)    F(1) = 1    F(0) = 0    Logo, F(3) = F(1...
Recursão fibonacci.hs Terminal ghci
Pattern Matching Pesquisa por padrões de dados e, caso obtenha sucesso, fazer algo com ele.
Pattern Matching Pesquisa  por padrões de dados e, caso  obtenha sucesso, fazer algo com ele. Construção sintática do Ha...
Pattern Matching Construção sintática do Haskell. Pesquisa por padrões de dados e, caso  obtenha sucesso, fazer algo com...
Pattern Matching Pode   ser usado com:  –   Números.  –   Caracteres.  –   Listas.  –   Tuplas.
Pattern Matching Ex:   sorte.hs Terminal ghci
Pattern Matching Exercício:    Implementar a função sayMe.hs, que diz seu    parametro de 1 até 5 ou “não está entre 1 e ...
Pattern Matching Exercício:    Implementar uma função que diz se parametro de    1 até 5 ou “Não está entre 1 e 5”. Dica...
Pattern Matching Resposta: sayMe.hs
Pattern Matching Ex2: car.hs Terminal ghci
Pattern Matching   Pattern Matching também pode falhar!
Guards Forma de testar se uma ou mais propriedades são V. ou F.
Guards Forma  de testar se uma ou mais  propriedades são V. ou F. Funcionam bem com Patterns.
Guards Ex:Função que repreende o usuário de uma forma específica, dependendo do seu IMC.  –   Imc <= 18,5: Considerado ma...
Guards Ex: imc.hs
Guards Ex: Melhorando o código: imc.hs
Guards Ex: Melhorando o código:          Terminal ghci
Guards Exercício:  Implementar a função max.hs, que recebe  dois parâmetros e retorna o maior.
Guards Exercício:  max.hs
Maximum Recebeuma lista de coisas que podem ser ordenadas e retorna a maior dela.
Maximum Recebeuma lista de coisas que podem ser ordenadas e retorna a maior dela. Exemplo:   Instâncias do Typeclass Ord.
Maximum Ex: Programa que recebe uma lista de coisas e retorna a maior dela.
Maximum Ex:    maximo.hs
Maximum Exercício:  Implementar a Função somaLista.hs, para  somar os elementos de uma lista.
Maximum Exercício:  Implementar a Função somaLista.hs, para  somar os elementos de uma lista. Dicas:    1. sumList :: [I...
Listas Listas   são estruturas de dados homogêneas:  –   Armazena vários elementos do MESMO tipo  –   Lista de caracteres...
Listas Listas   são estruturas de dados homogêneas:  –   Lista de caracteres  –   Lista de inteiros  –   Lista vazia
ListasO   que caracteriza uma lista?                              utilizam colchetes              valores são separados p...
ListasO   Haskell irá reclamar da lista abaixo?
ListasO   Haskell irá reclamar da lista abaixo? Sim, porque não há apenas um tipo de dado na lista!!
Listas Listas   podem conter listas que contem listas
Operadores Pode-ser   usado ainda >, <, >=, <=, ==, /=  E se as listas comparadas  são de tipos diferentes?
Strings – Um tipo especial String    é uma lista de caracteres “hello”   é o mesmo que [h,e,l,l,o] String    podem usar...
Operações com listas ++   → Unir duas listas::→ Acrescentar um elemento no início de uma lista
Operações com listas !!   → Obter um elemento pelo seu índice   E se o índice for superior   ao tamanho da lista?
Operações com listas
Operações com listas head     → retorna o primeiro elemento tail   → retorna tudo, exceto o primeiro elemento           ...
Operações com listas length   → retorna o seu tamanho null   → verifica se a lista é vazia reverse    → reverte uma lis...
Operações com listas drop → similar ao take, mas retira do início da lista maximum    → retorna o maior elemento minimu...
Operações com listas product   → retorna o produto elem   → verifica se o elemento pertence a lista replicate          ...
Operações com listas - RangesE se você precisar de uma lista com todos os números entre 1 e 10? Solução:   [1,2,3,4,5,6,...
Operações com listas - Ranges Não!!   Perda de tempo.E  se você precisar de uma lista com todos os  números entre 1 e 10...
Operações com listas - Ranges São uma sequência aritmética de elementos devidamente enumerados Números   e caracteres po...
Operações com listas - RangesE  se quisermos todos os números ímpares entre 1 e 20? Ou se quisermos sempre ter o terceiro...
Tuplas Um jeito de armazenar muitos elementos em  um único lugar Não precisa ser homogênera
TuplasO   que caracteriza uma tupla?                             utilizam parênteses             valores são separados po...
Operadores  Pode-ser    usado ainda >, <, >=, <=, ==, /=E se as tuplascomparadas são detipos/tamanhos diferentes?
Operações com tuplas (par) fst   → retorna seu primeiro componente snd    → retorna seu segundo componente
Entradas e Saídas de dados Fornecer   dados e receber dados são de suma importância para que exista uma interatividade ma...
Entradas e Saídas de dados Abram   um editor de texto.<   main = putStr "hello, world" > Salvem   em uma pasta com o no...
Entradas e Saídas de dados Compilar  –   ghc -o teste teste.hs Executar  –   ./teste
Entradas e Saídas de dados putStr→ imprimi uma string sem pular linha putStrLn → imprimi uma string pulando uma  linha
Entradas e Saídas de dados main = do   putStrLn "Qual seu nome?"   name <- getLine   putStrLn ("Eu sou " ++ name)
Entradas e Saídas de dados import Data.Char  main = do    putStrLn "Qual é o seu primeiro nome?"    firstName <- getLine  ...
Entradas e Saídas de dados main = do   line <- getLine   if null line       then return ()       else do          putStrLn...
Entradas e Saídas de dados main = do   return ()   return "HAHAHA"   line <- getLine   return "BLAH BLAH BLAH"   return 4 ...
Entradas e Saídas de dados main = do   a <- return "Alô"   b <- return "Mundo!"   putStrLn $ a ++ " " ++ b
Entradas e Saídas de dados main = do   c <- getChar   if c /=         then do          putChar c          main       else ...
Entradas e Saídas de dados import Control.Monad main = do   c <- getChar   when (c /=  ) $ do      putChar c      main
Entradas e Saídas de dados main = do   a <- getLine   b <- getLine   c <- getLine   print [a,b,c]
Entradas e Saídas de dados main = do   rs <- sequence [getLine, getLine, getLine]   print rs
Entradas e Saídas de dados main = do   contents <- getContents   putStr (shortLinesOnly contents) shortLinesOnly :: String...
Entradas e Saídas de dados main = do   rs <- sequence [getLine, getLine, getLine]   print rs
Entradas e Saídas de dados import System.IO main = do   contents <- readFile   "/caminho/texto.txt"   putStr contents
Entradas e Saídas de dados import System.IO import Data.Char main = do   contents <- readFile "texto.txt"   writeFile "nov...
Entradas e Saídas de dados import System.IO main = do   todoItem <- getLine   appendFile "novotexto2.txt" (todoItem ++ "n")
Referências Bibliográficas Aprender   Haskell será um grande bem para  você!  http://haskell.tailorfontela.com.br/ Progr...
Haskell     Obrigada!    Perguntas?
Introdução a Linguagemde Programação Haskell          Bruno Rafael          Emanuel Franco          Iorgama Porcely       ...
Próximos SlideShares
Carregando em…5
×

Haskell

2.086 visualizações

Publicada em

Linguagem de programação Haskell

Publicada em: Educação
1 comentário
7 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
2.086
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
0
Comentários
1
Gostaram
7
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Haskell

  1. 1. Introdução a Linguagemde Programação Haskell Bruno Rafael Emanuel Franco Iorgama Porcely Jessyka Oliveira 27 de Novembro
  2. 2. Tópicos Introdução a Haskell Tipos de dados Operadores Criando funções Recursão Pattern Matching Guards Listas Tuplas
  3. 3. O que é Haskell? Linguagem de programação puramente funcional. Variáveis imutáveis; Expressões em formas de funções, sem efeitos colaterais, ou seja, a função ira somente calcular algo e devolve-lo como resultado.
  4. 4. O que é Haskell? Inicialmenteessa forma pode ser visto como uma limitação, porém: Quando uma função é chamada duas vezes com os mesmos parâmetros, é garantido o retorno do mesmo resultado. Isso se chama transparência referencial.
  5. 5. Transparência referencial Permite que o compilador raciocine sobre o comportamento do programa; Permiteque você deduza facilmente (e até mesmo prove) que uma função está correta; Permitea construção de funções mais complexas juntando diversas funções simples
  6. 6. Haskell é preguiçoso Não irá executar funções e calcular as coisas antes que ele seja realmente obrigado a lhe mostrar um resultado. Istopermite simplificar coisas como estruturas de dados infinitas.
  7. 7. Exemplo Temos a seguinte lista de números imutável: xs = [1,2,3,4,5,6,7,8] Função DoubleMe (Multiplica cada elemento por 2 e retorna uma nova lista) Queremos multiplicar nossa lista por 8.
  8. 8. Na linguagem imperativa Fazendo: doubleMe (doubleMe (doubleMe (xs ))) Provavelmente iria passar uma vez pela lista, fazer uma cópia e retornar. Em seguida, ele iria passar por mais duas vezes e retornar o resultado.
  9. 9. Na linguagem preguiçosa Fazendo: doubleMe (doubleMe (doubleMe (xs )))A função será executada para o primeiro elemento da lista, seguido dos elementos seguintes. Assim a lista é percorrida somente uma vez.
  10. 10. Haskell é estaticamente tipadaO compilador saberá no código o que é um número, o que é uma string e assim por diante. Uma série de possíveis erros poderão ser capturados em tempo de compilação. Ex.: Tentando adicionar um número a uma string, o compilador ira se queixar com você.
  11. 11. Inferência de Tipo Não é necessário explicitamente identificar cada pedaço de código com um tipo; O sistema de tipos inteligente do Haskell descobrirá muito sobre ele. Ex.: Tendo a = 5 + 4, não é necessário dizer que a é um número, pois já será identificado.
  12. 12. Elegante e Conciso Utiliza uma série de conceitos de alto nível; Programas Haskell são normalmente mais curtos do que os seus equivalentes imperativos; Programas mais curtos são mais fáceis de se manter e têm menos bugs.
  13. 13. Feito por caras realmenteinteligentes O trabalho sobre Haskell começou em 1987 quando uma comissão de pesquisadores se reuniu para projetar uma linguagem matadora. Em 2003, o Relatório Haskell foi publicado já com uma versão estável da linguagem.
  14. 14. O que preciso para começar? Interpretador HUGS http://cvs.haskell.org/Hugs/pages/downloadin g.htm Compilador GHC http://www.haskell.org/ghc/download.html
  15. 15. HUGS – Primeiros comandos :quit - Sai do Hugs :? - Exibe a ajuda do Hugs :load <caminho_do_arquivo> - Carrega um arquivo para o Hugs :reload - Recarrega o último arquivo carregado
  16. 16. Operações Pode-se utilizar todos operadores comuns em uma só linha e todas suas regras usuais precedentes serão obedecidas.
  17. 17. Operações Podemos utilizar parênteses para declarar de forma explicita a operação precedente ou para mudá-la
  18. 18. Operações Sevocê quiser obter números negativos, sempre tenha a operação determinada por parênteses. Fazendo 5 * -3 o GHCI irá gritar com você; Fazendo 5 * (-3) isto irá funcionar perfeitamente
  19. 19. Operações Booleanas Onde && refere-se a expressão booleana and, ||refere-se a expressão booleana or. not faz a negação de um True ou de um False.
  20. 20. Testes de igualdades Vejamos alguns testes com operadores de igualdade:
  21. 21. Operadores para inteiros Além dos operadores convencionais temos: ^ : para cálculos de Potência.ghci> 2 ^ 416ghci> 4 ^ 4256 Q
  22. 22. Funções para Inteiros div : divisão de númerosghci> div 4 22 mod: resto da divisãoghci> mod 10 31
  23. 23. Funções para Inteiros succ : retorna sucessorghci> succ 89 negate: muda sinal do númeroghci> negate 10-10
  24. 24. Funções para Inteiros mim : retorna menor valor ghci> mim 9 10 9 max: retorna maior valor ghci> max 100 101 101
  25. 25. Funções para Inteiros Fuções podem ser escritas como operadores, e vice-versa:ghci> 4 `div` 22ghci> (+) 4 26
  26. 26. Funções para Inteiros As funções tem precedencia sobre as operações, como podemos ver abaixo: As duas expressões são equivalentes.
  27. 27. Tipos e Funções para Float Os mesmos dos inteiros, com mais alguns: ** : Exponenciação; cos, sin, tag: Coseno, Seno e Tangente; log: Logaritmo na base e; logBase: Logaritmo em base qualquer.
  28. 28. Tipos e Funções para Float sqrt: raiz quadrada;ghci> sqrt 164.0 pi: Constante pi;ghci> 2 * pi6.28318530717959
  29. 29. Fazendo sua própria função Vamos agora fazer nossa primeira função. No editor de texto escreva: doubleMe x = x + x Salve como “baby.hs”. Essa função retornará o dobro do valor de entrada.
  30. 30. Fazendo sua própria função Indoao local onde o arquivo foi salvo execute os seguintes passos:ghci> :1 baby  [1 of 1] Compiling Main             ( baby.hs, interpreted )  Ok, modules loaded: Main.  -- Função compilada, agora vamostestarghci> doubleMe 9  18  ghci> doubleMe 8.3  16.6   
  31. 31. Recursão Forma de definir funções que fazem chamadas a si próprias.
  32. 32. Recursão Forma de definir funções que fazem chamadas a si próprias. Regras: – Ter condição de parada. – Tornar o problema mais simples.
  33. 33. Recursão Fatorial: - Condição de parada: fatorial 0 = 1. - Ex: 3! = 3 * 2! = 2 * 1! = 1 * 0! = 0!
  34. 34. Recursão Fatorial: - Condição de parada: fatorial 0 = 1. - Ex: 3! = 3 * 2! = 2 * 1! = 1 * 0! = 0! = 1 Logo, 3 * ( 2 * ( 1 * 1)) .
  35. 35. Recursão fatorial.hs Terminal ghci.
  36. 36. Recursão Fibonacci: - Condição Limite: F(0) = 0. F(1) = 1. - F(n) = F(n – 1) + F(n - 2)
  37. 37. Recursão Fibonacci: - EX: F(3) F(3) = F(2) + F(1) F(2) = F(1) + F(0) F(1) = 1 F(0) = 0
  38. 38. Recursão Fibonacci: - EX: F(3) F(3) = F(2) + F(1) F(2) = F(1) + F(0) F(1) = 1 F(0) = 0 Logo, F(3) = F(1) + F(0) + F(1).
  39. 39. Recursão fibonacci.hs Terminal ghci
  40. 40. Pattern Matching Pesquisa por padrões de dados e, caso obtenha sucesso, fazer algo com ele.
  41. 41. Pattern Matching Pesquisa por padrões de dados e, caso obtenha sucesso, fazer algo com ele. Construção sintática do Haskell.
  42. 42. Pattern Matching Construção sintática do Haskell. Pesquisa por padrões de dados e, caso obtenha sucesso, fazer algo com ele. Código: – Simples. – Conciso. – Legível.
  43. 43. Pattern Matching Pode ser usado com: – Números. – Caracteres. – Listas. – Tuplas.
  44. 44. Pattern Matching Ex: sorte.hs Terminal ghci
  45. 45. Pattern Matching Exercício: Implementar a função sayMe.hs, que diz seu parametro de 1 até 5 ou “não está entre 1 e 5”.
  46. 46. Pattern Matching Exercício: Implementar uma função que diz se parametro de 1 até 5 ou “Não está entre 1 e 5”. Dicas: 1. SayMe :: (Num a) => a → String. 2. sayMe 1 = “Um!”. (…) 3. sayMe x = “Não está entre 1 e 5”.
  47. 47. Pattern Matching Resposta: sayMe.hs
  48. 48. Pattern Matching Ex2: car.hs Terminal ghci
  49. 49. Pattern Matching Pattern Matching também pode falhar!
  50. 50. Guards Forma de testar se uma ou mais propriedades são V. ou F.
  51. 51. Guards Forma de testar se uma ou mais propriedades são V. ou F. Funcionam bem com Patterns.
  52. 52. Guards Ex:Função que repreende o usuário de uma forma específica, dependendo do seu IMC. – Imc <= 18,5: Considerado magro. – Imc <= 25,0: Considerado saudável. – Imc <= 30,0: Considerado gordo.
  53. 53. Guards Ex: imc.hs
  54. 54. Guards Ex: Melhorando o código: imc.hs
  55. 55. Guards Ex: Melhorando o código: Terminal ghci
  56. 56. Guards Exercício: Implementar a função max.hs, que recebe dois parâmetros e retorna o maior.
  57. 57. Guards Exercício: max.hs
  58. 58. Maximum Recebeuma lista de coisas que podem ser ordenadas e retorna a maior dela.
  59. 59. Maximum Recebeuma lista de coisas que podem ser ordenadas e retorna a maior dela. Exemplo: Instâncias do Typeclass Ord.
  60. 60. Maximum Ex: Programa que recebe uma lista de coisas e retorna a maior dela.
  61. 61. Maximum Ex: maximo.hs
  62. 62. Maximum Exercício: Implementar a Função somaLista.hs, para somar os elementos de uma lista.
  63. 63. Maximum Exercício: Implementar a Função somaLista.hs, para somar os elementos de uma lista. Dicas: 1. sumList :: [Int] → Int. 2. Caso Base: sumList [] = 0. 3. Caso recursivo: sumList (a:as) = a + sumList as.
  64. 64. Listas Listas são estruturas de dados homogêneas: – Armazena vários elementos do MESMO tipo – Lista de caracteres  listaVogais = [a,e,i,o,u] – Lista de inteiros  listaNumPar = [2,4,6,8]
  65. 65. Listas Listas são estruturas de dados homogêneas: – Lista de caracteres – Lista de inteiros – Lista vazia
  66. 66. ListasO que caracteriza uma lista? utilizam colchetes valores são separados por vírgulas
  67. 67. ListasO Haskell irá reclamar da lista abaixo?
  68. 68. ListasO Haskell irá reclamar da lista abaixo? Sim, porque não há apenas um tipo de dado na lista!!
  69. 69. Listas Listas podem conter listas que contem listas
  70. 70. Operadores Pode-ser usado ainda >, <, >=, <=, ==, /= E se as listas comparadas são de tipos diferentes?
  71. 71. Strings – Um tipo especial String é uma lista de caracteres “hello” é o mesmo que [h,e,l,l,o] String podem usar as mesmas funções de listas Vamos conhecê-los?!
  72. 72. Operações com listas ++ → Unir duas listas::→ Acrescentar um elemento no início de uma lista
  73. 73. Operações com listas !! → Obter um elemento pelo seu índice E se o índice for superior ao tamanho da lista?
  74. 74. Operações com listas
  75. 75. Operações com listas head → retorna o primeiro elemento tail → retorna tudo, exceto o primeiro elemento Cuidado para não last → retorna o último elemento Utilizá-los em listas vazias!! init → retorna tudo, exceto o último elemento
  76. 76. Operações com listas length → retorna o seu tamanho null → verifica se a lista é vazia reverse → reverte uma lista take→ retorna um número desejados de elementos da lista
  77. 77. Operações com listas drop → similar ao take, mas retira do início da lista maximum → retorna o maior elemento minimum → retorna o menor elemento sum → retorna a soma
  78. 78. Operações com listas product → retorna o produto elem → verifica se o elemento pertence a lista replicate → repete o mesmo elemento em um nova lista
  79. 79. Operações com listas - RangesE se você precisar de uma lista com todos os números entre 1 e 10? Solução: [1,2,3,4,5,6,7,8,9,10]?E se for entre 1 e 1000? ou 10000?
  80. 80. Operações com listas - Ranges Não!! Perda de tempo.E se você precisar de uma lista com todos os números entre 1 e 10? ou 1000? ou 10000? Solução: Utilizamos os ranges!!
  81. 81. Operações com listas - Ranges São uma sequência aritmética de elementos devidamente enumerados Números e caracteres podem ser enumerados. Ex. 1, 2, 3,…, 100 | A, B, C, ..., Z
  82. 82. Operações com listas - RangesE se quisermos todos os números ímpares entre 1 e 20? Ou se quisermos sempre ter o terceiro número entre 1 e 20? Podemos definir etapas específicas!!
  83. 83. Tuplas Um jeito de armazenar muitos elementos em um único lugar Não precisa ser homogênera
  84. 84. TuplasO que caracteriza uma tupla? utilizam parênteses valores são separados por vírgulas
  85. 85. Operadores  Pode-ser usado ainda >, <, >=, <=, ==, /=E se as tuplascomparadas são detipos/tamanhos diferentes?
  86. 86. Operações com tuplas (par) fst → retorna seu primeiro componente snd → retorna seu segundo componente
  87. 87. Entradas e Saídas de dados Fornecer dados e receber dados são de suma importância para que exista uma interatividade maior entre usuário e máquina.
  88. 88. Entradas e Saídas de dados Abram um editor de texto.< main = putStr "hello, world" > Salvem em uma pasta com o nome “teste.hs”
  89. 89. Entradas e Saídas de dados Compilar – ghc -o teste teste.hs Executar – ./teste
  90. 90. Entradas e Saídas de dados putStr→ imprimi uma string sem pular linha putStrLn → imprimi uma string pulando uma linha
  91. 91. Entradas e Saídas de dados main = do putStrLn "Qual seu nome?" name <- getLine putStrLn ("Eu sou " ++ name)
  92. 92. Entradas e Saídas de dados import Data.Char main = do putStrLn "Qual é o seu primeiro nome?" firstName <- getLine putStrLn "Qual é o seu segundo nome?" lastName <- getLine let bigFirstName = map toUpper firstName bigLastName = map toUpper lastName putStrLn $ "Olá " ++ bigFirstName ++ " " ++ bigLastName
  93. 93. Entradas e Saídas de dados main = do line <- getLine if null line then return () else do putStrLn $ reverseWords line main reverseWords :: String -> String reverseWords = unwords . map reverse . words
  94. 94. Entradas e Saídas de dados main = do return () return "HAHAHA" line <- getLine return "BLAH BLAH BLAH" return 4 putStrLn line
  95. 95. Entradas e Saídas de dados main = do a <- return "Alô" b <- return "Mundo!" putStrLn $ a ++ " " ++ b
  96. 96. Entradas e Saídas de dados main = do c <- getChar if c /= then do putChar c main else return ()
  97. 97. Entradas e Saídas de dados import Control.Monad main = do c <- getChar when (c /= ) $ do putChar c main
  98. 98. Entradas e Saídas de dados main = do a <- getLine b <- getLine c <- getLine print [a,b,c]
  99. 99. Entradas e Saídas de dados main = do rs <- sequence [getLine, getLine, getLine] print rs
  100. 100. Entradas e Saídas de dados main = do contents <- getContents putStr (shortLinesOnly contents) shortLinesOnly :: String -> String shortLinesOnly input = let allLines = lines input shortLines = filter (line -> length line < 15) allLines result = unlines shortLines in result
  101. 101. Entradas e Saídas de dados main = do rs <- sequence [getLine, getLine, getLine] print rs
  102. 102. Entradas e Saídas de dados import System.IO main = do contents <- readFile "/caminho/texto.txt" putStr contents
  103. 103. Entradas e Saídas de dados import System.IO import Data.Char main = do contents <- readFile "texto.txt" writeFile "novotexto.txt" (map toUpper contents)
  104. 104. Entradas e Saídas de dados import System.IO main = do todoItem <- getLine appendFile "novotexto2.txt" (todoItem ++ "n")
  105. 105. Referências Bibliográficas Aprender Haskell será um grande bem para você! http://haskell.tailorfontela.com.br/ Programação Funcional com a linguagem Haskell http://www.cin.ufpe.br/~dclal/monitoria/duBoi s.pdf
  106. 106. Haskell Obrigada! Perguntas?
  107. 107. Introdução a Linguagemde Programação Haskell Bruno Rafael Emanuel Franco Iorgama Porcely Jessyka Oliveira

×