Upload
preston-mitchell
View
49
Download
1
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
HaskellProgramação Funcional
Diego LimaRubem 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.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
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 - IntFunçõ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 – FloatMesmos 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]
FUNÇÕES
Load de Arquivo
• :load <caminho.hs>
• :reload – (reload do ultimo arquivo)
Notação
{- mais comentario blablablbal -}-- Comentario
quadrado :: Int -> Intquadrado x = x * x
NotaçãomyNot :: Bool -> BoolmyNot x
| x == True = False| otherwise = True
myNot :: Bool -> BoolmyNot True = FalsemyNot False = True
Definindo Operadores
Operador XOR
(@@) :: Bool -> Bool -> Boola @@ 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.