Haskell Programao Funcional Diego Lima Rubem Moreira Objetivos
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
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. h tm • 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
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 – String • Lista de CHAR • >”OPA!” • >”Mais ” ++ “q” ++ “ BLZ”
Tipos – Ponto Flutuante(Float) • >2. 34 • >5. 44 e 5 • >6. 2 e-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) • log. Base – Logaritmo em qualquer base (Ex: log. Base 10 2)
Tipos – Float • sqrt – Raiz quadrada • from. Int – 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, 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]
FUNÇÕES
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 my. Not : : Bool -> Bool my. Not x | x == True = False | otherwise = True my. Not : : Bool -> Bool my. Not True = False my. Not False = True
Definindo Operadores Operador XOR (@@) : : Bool -> Bool a @@ b | a == b = False | otherwise = True
Exercicios • menor. Dois : : Int -> Int – Recebe dois valores e retorna o menor • menor. Tres : : Int -> Int – Recebe três valores e retorna o menor usando a função menor. Dois • Area : : Float -> Float – Recebe um float representando o raio de uma circunferência e retorna a área
Exercicios • (&&&) : : String -> String – Definir operador que concatena duas strings se elas forem diferentes. Se iguais retorna uma das duas • xor. Tres : : (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.
- Slides: 33