330 likes | 422 Views
Haskell Programação Funcional. Diego Lima Marcelo Costa. 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.
E N D
HaskellProgramação Funcional Diego Lima Marcelo Costa
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
Haskell • Pure Function Programming • Open source • 20 anos de estudo • Código robusto, conciso e correto • Integração com outras linguagens • Bibliotecas • Comunidade ativa
Ambiente • Interpretador HUGS • http://cvs.haskell.org/Hugs/pages/downloading.htm • Compilador GHC • http://www.haskell.org/ghc/download.html
Hugs • Iniciar HUGS
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
Hugs - Expressoes • > 2 + 3 • > 5 – (6 * (4 / 2)) • >“opa” • >True • >5 > 7
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
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
Tipos - Int • OBS: Funções podem ser escritas como operadores e vice-versa • Ex: • >(+) 2 3 • > 4 `div` 2
Tipos - Int • OBS: É possível definir os próprios operadores • Mais na frente...
Tipos – Int Operações Booleanas • > • >= • == Igual • /= • <= • <
Tipos – Booleanos (Bool) • True e False... Operadores • && • || • not
Tipos – Char • Tabela ASCII • ‘a’ • ‘7’ • ‘a’< ‘b’ • ‘\65’
Tipos – String • Lista de CHAR • >”OPA!” • >”Mais ” ++ “q” ++ “ BLZ”
Tipos – Ponto Flutuante(Float) • >2.34 • >5.44e5 • >6.2e-8
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)
Tipos – Float • sqrt • Raiz quadrada • fromInt • Converte um Int para um Float • pi • Constante Pi
Tipos – Tuplas Construtor Polimórfico • >(1,2) • >(12.43, “opa”) • >(12, 3.45, ‘a’, “varios”, True)
Tipos – Tuplas • >fst (1,2) • >snd (1,2)
Tipos – Listas [] Construtor Polimórfico • > [1,2,3,4,5] ::[Int] • >[“a”, “asdsa”, “blz”] ::[[Char]] • >[True, True, False] ::Bool
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]
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]
Tipos – Listas [] Operadores • (:) Operador de construção de lista • 1:2:3:4:[] • (++) Concatenação de listas • [1,2] ++ [3,4] ++ [5,6]
Load de Arquivo • :load <caminho.hs> • :reload • (reload do ultimo arquivo)
Notação {- mais comentario blablablbal -} -- Comentario quadrado :: Int -> Int quadrado x = x * x
Notação myNot :: Bool -> Bool myNot x | x == True = False | otherwise = True myNot :: Bool -> Bool myNot True = False myNot False = True
Definindo Operadores Operador XOR (@@) :: Bool -> Bool -> Bool a @@ b | a == b = False | otherwise = True
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
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
Exercicios • Fatorial :: Int -> Int • Fatorial de um inteiro • ...proxima aula: Recursão e mais notações de funções.