1 / 33

Haskell Programação Funcional

Haskell Programação Funcional. Diego Lima Rubem Moreira. Objetivos da programação funcional. Programação com um alto nível de abstração, possibilitando: alta produtividade programas mais concisos programas mais fáceis de entender menos erros provas de propriedades sobre programas.

Download Presentation

Haskell Programação Funcional

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. HaskellProgramação Funcional Diego Lima Rubem Moreira

  2. Objetivosdaprogramaçãofuncional • Programação com um alto nível de abstração, possibilitando: • alta produtividade • programas mais concisos • programas mais fáceis de entender • menos erros • provas de propriedades sobre programas

  3. Haskell • Pure Function Programming • Open source • 20 anos de estudo • Código robusto, conciso e correto • Integração com outras linguagens • Bibliotecas • Comunidade ativa

  4. Ambiente • Interpretador HUGS • http://cvs.haskell.org/Hugs/pages/downloading.htm • Compilador GHC • http://www.haskell.org/ghc/download.html

  5. Hugs • Iniciar HUGS

  6. Hugs - 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

  7. Hugs - Expressoes • > 2 + 3 • > 5 – (6 * (4 / 2)) • >“opa” • >True • >5 > 7

  8. TIPOS

  9. Tipos – Inteiros (Int) Operadores • +, * • Soma e multiplicação de inteiros • ^ • Potência: 2^4 é 16 • - • Serve para mudar o sinal de um inteiro ou para fazer a subtração

  10. Tipos - Int Funções • div • Divisão de números inteiros; div 10 3 é 3 • mod • O resto de uma divisão de inteiros; mod 10 3 é 1 • abs • Valor absoluto de um inteiro • negate • Muda o sinal de um inteiro

  11. Tipos - Int • OBS: Funções podem ser escritas como operadores e vice-versa • Ex: • >(+) 2 3 • > 4 `div` 2

  12. Tipos - Int • OBS: É possível definir os próprios operadores • Mais na frente...

  13. Tipos – Int Operações Booleanas • > • >= • == Igual • /= • <= • <

  14. Tipos – Booleanos (Bool) • True e False... Operadores • && • || • not

  15. Tipos – Char • Tabela ASCII • ‘a’ • ‘7’ • ‘a’< ‘b’ • ‘\65’

  16. Tipos – String • Lista de CHAR • >”OPA!” • >”Mais ” ++ “q” ++ “ BLZ”

  17. Tipos – Ponto Flutuante(Float) • >2.34 • >5.44e5 • >6.2e-8

  18. Tipos – Float Mesmos operadores de Inteiros mais alguns: • / • Divisão • ** • Exponenciação, x ** x = xy • Cos, sin, tan • Coseno, seno e tangente • log • Logaritmo na base e (Ex >log 2) • logBase • Logaritmo em qualquer base (Ex: logBase 10 2)

  19. Tipos – Float • sqrt • Raiz quadrada • fromInt • Converte um Int para um Float • pi • Constante Pi

  20. Tipos – Tuplas Construtor Polimórfico • >(1,2) • >(12.43, “opa”) • >(12, 3.45, ‘a’, “varios”, True)

  21. Tipos – Tuplas • >fst (1,2) • >snd (1,2)

  22. Tipos – Listas [] Construtor Polimórfico • > [1,2,3,4,5] ::[Int] • >[“a”, “asdsa”, “blz”] ::[[Char]] • >[True, True, False] ::Bool

  23. Tipos – Listas [] • >[[1,2,3], [5,4]] ::[[Int]] • >[(3,”ha”), (4,”sim”)] ::[(Int, [Char])] • >[] OBS: • Ordem e ocorrência importam • [1,2,1] /= [2,1,1] /= [1,2]

  24. Tipos – Listas [] Notação • [a .. b] é a lista [a, a+1, ..., b] • [1..5] • [5..(-15)] • [a,b .. c] é a lista de a até c passo b – a • [2,4..20] • [3, (5+4)/3 .. 20]

  25. Tipos – Listas [] Operadores • (:) Operador de construção de lista • 1:2:3:4:[] • (++) Concatenação de listas • [1,2] ++ [3,4] ++ [5,6]

  26. FUNÇÕES

  27. Load de Arquivo • :load <caminho.hs> • :reload • (reload do ultimo arquivo)

  28. Notação {- mais comentario blablablbal -} -- Comentario quadrado :: Int -> Int quadrado x = x * x

  29. Notação myNot :: Bool -> Bool myNot x | x == True = False | otherwise = True myNot :: Bool -> Bool myNot True = False myNot False = True

  30. Definindo Operadores Operador XOR (@@) :: Bool -> Bool -> Bool a @@ b | a == b = False | otherwise = True

  31. Exercicios • menorDois :: Int -> Int -> Int • Recebe dois valores e retorna o menor • menorTres :: Int -> Int -> Int -> Int • Recebe três valores e retorna o menor usando a função menorDois • Area :: Float -> Float • Recebe um float representando o raio de uma circunferência e retorna a área

  32. Exercicios • (&&&) :: String -> String -> String • Definir operador que concatena duas strings se elas forem diferentes. Se iguais retorna uma das duas • xorTres :: (Bool, Bool, Bool) -> Bool • Funcao que retorna o resultado da operação xor sobre 3 booleanos

  33. Exercicios • Fatorial :: Int -> Int • Fatorial de um inteiro • ...proxima aula: Recursão e mais notações de funções.

More Related