Você está na página 1de 4

Números Inteiros

Programação Funcional • 1,2,3,...:: Int


Tipos Básicos
• +, *, -, ^, div, mod :: Int -> Int -> Int
• >, >=, ==, /=, <=, < :: Int -> Int -> Bool
Sérgio Soares
scbs@cin.ufpe.br

Exemplo Booleanos
> 2^3
8
> div 14 3 • True, False :: Bool
4
> 14 `div` 3 • &&, || :: Bool -> Bool -> Bool
4 • not :: Bool -> Bool
> mod 14 3
2
> 14 `mod` 3
2

Exemplo Exemplo
-- ou exclusivo -- Verifica se não houve vendas em
Xor :: Bool -> Bool -> Bool -- uma semana n
Xor x y = (x || y) && not (x && y) vendasNulas :: Int -> Bool
vendasNulas n = (vendas n == 0)
-- outra forma de ou exclusivo
eXor :: Bool -> Bool -> Bool
eXor True x = not x
eXor False x = x

1
Caracteres Exemplo

• ’a’,’b’,...:: Char offset = ord 'A‘ – ord 'a'


• ’\t’, ’\n’, ’\\’, ’\’’, ’\"’ :: Char
maiuscula :: Char -> Char
maiuscula ch = chr (ord ch + offset)
• ord :: Char -> Int
• chr :: Int -> Char
ehDigito :: Char -> Bool
ehDigito ch = ('0' <= ch) && (ch <= '9‘)

Strings Exemplo

• "abc", "andre" :: String > "peixe" ++ "\n" ++ "gato“


peixe
• ++ :: String -> String -> String gato
• show :: ? -> String (overloading)

' ', "" e " " são diferentes!

Números Reais – Ponto Flutuante Exercícios


Float e Double • Defina a função addEspacos que produz um string
• 22.3435 :: Float com uma quantidade n de espaços.
addEspacos :: Int -> String
• +,-,*,/ :: Float -> Float -> Float
• pi :: Float • Defina a função paraDireita utilizando a
• ceiling, floor, round :: Float -> Int definição de addEspacos para adiciconar uma
• fromInt :: Int -> Float quantidade n de espaços à esquerda de um dado
• read :: String -> Float String, movendo o mesmo para a direita.
• show :: Float -> String paraDireita :: Int -> String -> String

2
Exercício
Dica
• Escreva uma função para retornar, em forma de tabela,
todas as vendas da semana 0 até a semana n, incluindo
imprimeTabela :: Int -> String
o total e a média de vendas no período. Usem as
funções definidas previamente e defina novas funções imprimeTabela n = cabecalho
que achar necessário. ++ imprimeSemanas n
Semana Venda ++ imprimeTotal n
vendas
0 12 ++ imprimeMedia n
totalVendas
1 14 maxVendas
2 15 vendasNulas
Total 41 addEspacos
Média 13.6667 paraDireita

Estruturas de dados - Tuplas


Sinônimos de Tipos
intP :: (Int, Int)
intP = (33,43) type Name = String
type Age = Int
(True, ’x’) :: (Bool, Char) type Phone = Int
(34, 22,’b’) :: (Int, Int, Char)
type Person = (Name, Age, Phone)
addPair :: (Int,Int) -> Int
addPair (x,y) = x+y name :: Person -> Name
name (n,a,p) = n
shift :: ((Int,Int),Int) -> (Int,(Int,Int))
shift ((x,y),z) = (x,(y,z))

Exemplo: equações de segundo grau Resolução bottom-up


ax2 + bx + c = 0.0 • Definir as funções auxiliares
oneRoot :: Float -> Float -> Float -> Float
• Duas raízes, se b2 > 4.0*a*c
oneRoot a b c = -b/(2.0*a)
• Uma raiz, se b2 = 4.0*a*c
twoRoots :: Float -> Float -> Float ->
• Não tem raízes, se b2 < 4.0*a*c (Float, Float)
• Calculando as raízes: twoRoots a b c = (d-e, d+e)
where
(-b ± sqrt(b2-4ac))/2a
d = -b/(2.0*a)
e = sqrt(b^2-4.0*a*c)/(2.0*a)

3
Resolução bottom-up Exercícios
• Definir a função principal • Defina a função menorMaior que recebe
roots :: Float -> Float -> Float -> String três inteiros e retorna uma tupla com o
roots a b c
| b^2 == 4.0*a*c = show (oneRoot a b c)
menor e o maior deles, respectivamente.
| b^2 > 4.0*a*c = show f ++ “ ” ++ show s
| otherwise = “no roots” • Defina a função ordenaTripla que
where (f,s) = twoRoots a b c
ou recebe uma tripla de inteiros e ordena a
f = fst(twoRoots a b c) mesma.
s = snd(twoRoots a b c)

Exercícios Exercícios
• Uma linha pode ser representada da seguinte • Se uma reta é dada por y − y1 y2 − y1
=
forma: y (x2, y2)
defina uma função x − x1 x2 − x1
type Ponto = (Float, Float) •
type Reta = (Ponto, Ponto) •(x1, y1)
pontoY :: Float -> Reta -> Float
• Defina funções que x
que, dada uma coordenada x e uma reta,
– retornem a primeira e a segunda coordenada de um retorne a coordenada y, tal que o ponto (x, y)
ponto faça parte da reta.
– indique se uma reta é vertical ou não
– o que acontece caso a reta seja vertical?
x1 == x2

Você também pode gostar