Haskell Programação Funcional

Post on 01-Jan-2016

45 views 1 download

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

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.