(i) union :: Eq a => [a] -> [a] -> [a] tal que (union xs ys) e a uni
ao
dos conjuntos xs e ys. Por exemplo,
o Funcional
Programaca
Folha de Exerccios 03
union [ 3 , 2 , 5 ] [ 5 , 7 , 3 , 4 ] == [ 3 , 2 , 5 , 7 , 4 ]
o notElem ::
Dica: use a funca
elemento n
ao pertence a uma lista.
d i f e r e n c i a [ 3 , 2 , 5 , 6 ] [ 5 , 7 , 3 , 4 ] == [ 2 , 6 ]
d i f e r e n c i a [ 3 , 2 , 5 ] [ 5 , 7 , 3 , 2 ] == [ ]
o frequencia :: a -> [a] -> Int tal que (frequencia
(k) Defina a funca
x xs) devolve o n
umero de ocorrencias de x em u. Por exemplo,
es:
1. Quais s
ao os tipos das seguintes funco
(a) remove x [ ] = [ ]
remove x ( y : y s ) = i f x == y then y s e l s e y : ( remove x y s )
Eq a => a -> [a] -> [a]
(b) p a r t e s [ ] = [ [ ] ]
p a r t e s ( x : xs ) = [ x : y | y < p a r t e s xs ] ++ p a r t e s xs
f r e q u e n c i a 5 [ 4 , 5 , 2 , 1 , 5 , 5 , 9 ] == 3
o unico :: Eq a => a -> [a] -> Bool tal que (unico
(l) Defina a funca
x xs) devolve True se x ocorre exatamente uma vez em u e False, caso
contr
ario.
u ni c o 2 [ 1 , 2 , 3 , 2 ] == F a l s e
u ni c o 2 [ 3 , 1 ] == F a l s e
u ni c o 2 [ 2 ] == True
o notElem ::
Dica: use a funca
(e) twice f x = f (f x)
o da quest
2. Explique o que cada funca
ao anterior faz?
es usando apenas funco
es pre-definidas em
3. Defina cada uma das seguintes funco
Haskell:
3 (valor absoluto de 2 - 5)
8 (valor absoluto de 5 - (-3))
10 (valor absoluto de -3 - 7)
(a) prodIntervalo :: Int -> Int -> Int que, dados dois valores inteiros n
e m, retornar o produto de todos os valores inteiros entre n e m (inclusive).
Por exemplo,
prodIntervalo 2 5 == 5i=2 i == 2 * 3 * 4 * 5 == 120
o product.
Dica: Use a funca
(b) somaIntervalo :: Int -> Int -> Int que, dados dois valores inteiros n
e m, retornar o produto de todos os valores inteiros entre n e m (inclusive).
Por exemplo,
P5
somaIntervalo 2 5 ==
i=2 i == 2 + 3 + 4 + 5 == 14
o sum.
Dica: Use a funca
length xs = length 0 xs
where length n [ ] = n
length n ( x : xs ) = length ( n+1) xs
remove 2 [ 1 , 2 , 5 , 2 , 4 , 3 , 2 ] == [ 1 , 5 , 4 , 3 ]
o unique :: Eq a => [a] -> [a] tal que (unique xs)
(q) Defina uma funca
es.
devolve uma lista com os elementos de xs sem repetico
o usa a funca
o auxiliar length, que possui um par
Essa funca
ametro adicional
o length e definida usando recurs
para acumular o resultado. A funca
ao
de cauda, uma vez que a chamada recursiva length (n+1) xs, usada no
o, n
lado direito da definica
ao ocorre dentro de nenhum argumento de outra
o. Use essa tecnica de recurs
funca
ao de cauda para definir as seguintes
es:
funco
(j) diferencia :: Eq a => [a] -> [a] -> [a] tal que (diferencia xs ys) e
a diferenca entre os conjuntos xs e ys. Por exemplo,
remove ::
unique [ 1 , 2 , 5 , 2 , 5 , 7 , 2 , 5 ] == [ 1 , 2 , 5 , 7 ]
o inserir :: Ord a => a -> [a] -> [a] tal que
(r) Defina uma funca
(inserir x xs) devolve uma lista ordenada ascendentemente, oriunda da
o apropriada de x em xs. Por exemplo,
inserca
inserir 3 [2,7,12]
que
ordenada [ 2 , 3 , 5 ] == True
ordenada [ 2 , 5 , 3 ] == F a l s e
(h) subconjunto :: Eq a => [a] -> [a] -> Bool tal que (subconjunto xs
ys) verifica xs e um subconjunto de ys. Por exemplo,
s u b c o n j u n t o [ 3 , 2 , 3 ] [ 2 , 5 , 3 , 5 ] == True
s u b c o n j u n t o [ 3 , 2 , 3 ] [ 2 , 5 , 6 , 5 ] == F a l s e