o Funcional
Programaca
Lista de Exerccios 03
n
n
=1
=
n
0
Por exemplo:
o da funca
o de ordem
A forma de Horner tambem pode ser expressa como aplicaca
o seguinte de forma a que a igualdade seja
superior foldr . Complete a definica
correta.
o zipWith e sum.
Usando a funca
3. Um trio (x, y, z) de inteiros positivos diz-se pitag
orico se x2 + y 2 = z 2 . Defina a
o pitagoricos :: Int -> [(Int, Int, Int)] que calcule todos os trios
funca
pitag
oricos cujas componentes n
ao ultrapassem o argumento.
horner cs z = foldr
cs
8. A lista infinita de n
umeros naturais [1,2,3,4,..] pode ser definida de v
arias maneiras
em Haskell:
Por exemplo: pitagoricos 10 = [(3, 4, 5), (4, 3, 5), (6, 8, 10), (8,
6, 10)].
number1 = [1..]
number2 = 1 :
Use compreens
ao de listas [(x,y,z) | x <- [],y<-[],z<-[],predicado]
4. Considere a seguinte serie (i.e. somas infinitas) que convergem para :
4
4
4
4
= + + ...
1
3
5
7
number4 = 1 :
length xs = length 0 xs
where length n [ ] = n
length n ( x : xs ) = length ( n+1) xs
o zipWith.
(c) Combine as duas listas usando a funca
o calcPi1 n que calcula o valor de pi somando n parcelas da
(d) Defina a funca
serie. Calcule o valor o somat
orio para 10, 100 e 1000 parcelas.
o usa a funca
o auxiliar length, que possui um par
Essa funca
ametro adicional para
o length e definida usando recurs
acumular o resultado. A funca
ao de cauda,
uma vez que a chamada recursiva length (n+1) xs, usada no lado direito da
o, n
o. Use essa
definica
ao ocorre dentro de nenhum argumento de outra funca
es:
tecnica de recurs
ao de cauda para definir as seguintes funco
(a) fac ::
(2)
o de funca
o em Haskell:
10. Considere a seguinte definica
until p f x = if p x then x else until p f (f x)
o until?
(a) Qual e o tipo da funca
o da express
(b) Qual e o resultado da avaliaca
ao until (10) square 2?
o until para definir uma funca
o que, dado um string s, retorne o
(c) Use a funca
string obtido removendo-se todos os caracteres iguais a branco que ocorrem
no incio de s.
(3)
Sugest
ao: pode exprimir n! como product [1..n]
11. INPUT: N
umero n inteiro positivo
OUTPUT: Lista de tuplas (f, p) que representam os fatores primos de n onde f
denota o fator propriamente dito e p seu respectivo expoente. (Todo n
umero x,
tal que x N, pode ser reescrito como o produto de potencias de bases primas e
expoentes naturais. Por exemplo, o n
umero 3361743 pode ser reescrito na forma,
3361743 = 3 7 11
(6)
Os n
umeros 3, 7 e 11 s
ao denominados fatores primos de 3361743 e 4, 3 e 2 seus
respectivas expoentes.)
0
0
PROT:
factors ::
2
0
(b) reverse ::
1
0
n
n!
=
k
k!(n k)!
Os n
umeros triangulares s
ao os n
umeros da seguinte forma Tn = Tn1 +n e T0 =
0. Defina uma lista infinita dos n
umeros triangulares triangular :: [[Int]].
6.
(1)
4
4
4
+
...
=3+
234
456
678
(4)
o do prel
1. A funca
udio scanl e uma variante do foldl que produz a lista com os valores
acumulados:
scanl f z [x1, x2, ...]
n 1 n 1
n
(0 < k < n)
+
=
k
k1
k
1
1
2
1
EX(S):
factors 3361743 => [(3,4),(7,3),(11,2)]
es a seguir, usando foldr e foldl:
12. Defina cada uma das funco
2
2
(a) elem :: a -> [a] -> Bool, que determina se um valor e uma elemento
de uma lista.
3
0
3
1
3
2
3
3
pascal 4 == [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
que
remove
da
lista
elementos