haskell programação funcional

33
Haskell Programação Funcional Diego Lima Marcelo Costa

Upload: palti

Post on 07-Jan-2016

23 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Haskell Programação Funcional

HaskellProgramação Funcional

Diego LimaMarcelo Costa

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.