Haskell Programação Funcional

33
Haskell Programação Funcional Diego Lima Rubem Moreira

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

Transcript of Haskell Programação Funcional

Page 1: Haskell Programação Funcional

HaskellProgramação Funcional

Diego LimaRubem Moreira

Page 2: Haskell Programação Funcional

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

Page 3: Haskell Programação Funcional

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

Page 4: Haskell Programação Funcional

Ambiente

• Interpretador HUGS– http://cvs.haskell.org/Hugs/pages/

downloading.htm

• Compilador GHC– http://www.haskell.org/ghc/download.html

Page 5: Haskell Programação Funcional

Hugs

• Iniciar HUGS

Page 6: Haskell Programação Funcional

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

Page 7: Haskell Programação Funcional

Hugs - Expressoes

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

Page 8: Haskell Programação Funcional

TIPOS

Page 9: Haskell Programação Funcional

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

Page 10: Haskell Programação Funcional

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

Page 11: Haskell Programação Funcional

Tipos - Int

• OBS: Funções podem ser escritas como operadores e vice-versa

• Ex:– >(+) 2 3

– > 4 `div` 2

Page 12: Haskell Programação Funcional

Tipos - Int

• OBS: É possível definir os próprios operadores

• Mais na frente...

Page 13: Haskell Programação Funcional

Tipos – Int

Operações Booleanas• > • >= • == Igual• /=• <=• <

Page 14: Haskell Programação Funcional

Tipos – Booleanos (Bool)

• True e False...

Operadores• && • ||• not

Page 15: Haskell Programação Funcional

Tipos – Char

• Tabela ASCII

• ‘a’• ‘7’• ‘a’< ‘b’• ‘\65’

Page 16: Haskell Programação Funcional

Tipos – String

• Lista de CHAR

• >”OPA!”• >”Mais ” ++ “q” ++ “ BLZ”

Page 17: Haskell Programação Funcional

Tipos – Ponto Flutuante(Float)

• >2.34

• >5.44e5

• >6.2e-8

Page 18: Haskell Programação Funcional

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)

Page 19: Haskell Programação Funcional

Tipos – Float

• sqrt – Raiz quadrada

• fromInt – Converte um Int para um Float

• pi – Constante Pi

Page 20: Haskell Programação Funcional

Tipos – Tuplas

Construtor Polimórfico• >(1,2)

• >(12.43, “opa”)

• >(12, 3.45, ‘a’, “varios”, True)

Page 21: Haskell Programação Funcional

Tipos – Tuplas

• >fst (1,2)

• >snd (1,2)

Page 22: Haskell Programação Funcional

Tipos – Listas []

Construtor Polimórfico• > [1,2,3,4,5] ::[Int]

• >[“a”, “asdsa”, “blz”] ::[[Char]]

• >[True, True, False] ::Bool

Page 23: Haskell Programação Funcional

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]

Page 24: Haskell Programação Funcional

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]

Page 25: Haskell Programação Funcional

Tipos – Listas []

Operadores• (:) Operador de construção de lista– 1:2:3:4:[]

• (++) Concatenação de listas– [1,2] ++ [3,4] ++ [5,6]

Page 26: Haskell Programação Funcional

FUNÇÕES

Page 27: Haskell Programação Funcional

Load de Arquivo

• :load <caminho.hs>

• :reload – (reload do ultimo arquivo)

Page 28: Haskell Programação Funcional

Notação

{- mais comentario blablablbal -}-- Comentario

quadrado :: Int -> Intquadrado x = x * x

Page 29: Haskell Programação Funcional

NotaçãomyNot :: Bool -> BoolmyNot x

| x == True = False| otherwise = True

myNot :: Bool -> BoolmyNot True = FalsemyNot False = True

Page 30: Haskell Programação Funcional

Definindo Operadores

Operador XOR

(@@) :: Bool -> Bool -> Boola @@ b

| a == b = False| otherwise = True

Page 31: Haskell Programação Funcional

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

Page 32: Haskell Programação Funcional

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

Page 33: Haskell Programação Funcional

Exercicios

• Fatorial :: Int -> Int– Fatorial de um inteiro

• ...proxima aula: Recursão e mais notações de funções.