Você está na página 1de 1

o partir :: Int -> [a] -> [[a]] tal que partir n de

11. Escreva uma funca


o d
decomp
oe uma lista em sub-listas cuja concatenaca
a a lista original e tal que
ltima).
cada sub-lista tem comprimento n (exceto, possivelmente, a u
Exemplo:partir 5 "abdefghijkl"= ["abde", "fghij", "kl"]

o Funcional
Programaca
Lista de Exerccios 02

o take , drop e (:)


Dica: use a funca
o de listas pelo m
o.
12. Ordenaca
etodo de inserca
o recursiva da funca
o insert :: Ord a => a -> [a] ->
(a) Escreva definica
o correta de forma
[a] para inserir um elemento numa lista ordenada na posica
o.
a manter a ordenaca

Prof. Wladimir Ara


ujo Tavares

Exemplo: insert 2 [0, 1, 3, 5] == [0, 1, 2, 3, 5]


o insert, escreva uma definica
o tambem recursiva da funca
o
(b) Usando a funca
o pelo metodo
insertSort :: Ord a => [a] -> [a] que implementa ordenaca
o:
de inserca

o recursiva da funca
o concatena ::
1. Escreva a definica
concatena uma lista de listas.

[[a]] -> [a] que


a lista vazia j
a est
a ordenada;
para ordenar uma lista n
ao vazia, recursivamente ordenamos a cauda e
o correta.
inserimos a cabeca na posica

Exemplo:
concatena [ [1,2], [3,4] ] == [1,2,3,4]
o recursiva da funca
o replica ::
2. Escreva a definica
produz uma lista com n elementos iguais.

Int -> a -> [a] que

o de listas pelo m
o:
13. Ordenaca
etodo de seleca

Exemplo:

o recursiva da funca
o minimo ::
(a) Escreva definica
calcula o menor valor duma lista n
ao-vazia.

replica 3 1 == [1,1,1]

Exemplo: minimo [5, 1, 2, 1, 3] == 1.

replica 3 a == "aaa"
o recursiva da funca
o elemento ::
3. Escreva a definica
Bool que testa se um valor ocorre numa lista

o recursiva da funca
o remove :: Eq a => a -> [a] ->
(b) Escreva uma definica
[a] que remove a primeira ocorrencia dum valor numa lista.

Eq a => a -> [a] ->

Exemplo: remove 1 [5, 1, 2, 1, 3] = [5, 2, 1, 3].

Exemplo:

es anteriores, escreva uma definica


o recursiva da funca
o
(c) Usando as funco
o pelo
selectionSort :: Ord a => [a] -> [a] que implementa ordenaca
o:
metodo de seleca

elemento 1 [2,3,1] == True


elemento 1 [2,3,4] == False
o recursiva da funca
o isSorted que retorna verdadeiro se a lista
4. Escreva a definica
est
a ordenada e falso, caso contr
ario.
isSorted ::

a lista vazia j
a est
a ordenada;
` cabeca o menor elemento m
para ordenar uma lista n
ao vazia, colocamos a
e recursivamente ordenamos a cauda sem o elemento m.

Ord a => [a] -> Bool

Exemplo:

14. Mostre como a lista em compreens


ao [f x | x <-xs, p x] se pode escrever como
o das funco
es de ordem superior map e filter.
combinaca
o sumsq que recebe um inteiro n como argumento e retorna a soma
15. Defina a funca
dos quadrados dos n primeiros inteiros.

isSorted [1,2,3,4] == True


isSorted [2,1,3,4] == False
o recursiva da funca
o palindromo que recebe uma string S e
5. Escreva a definica
retorna verdadeiro se S e um palindromo e falso, caso contr
ario.
palindromo ::

sumsq n = 12 + 22 + 32 + . . . + n2
o tamanho, que retorna o n
16. Defina a funca
umero de elementos em uma lista usando
foldr::(a -> b -> b) -> b -> [a] -> b e foldl::(b -> a -> b) -> b ->
[a] -> b.
o da funca
o concatena :: [[a]] -> [a] que concatena uma
17. Escreva a definica
o foldr::(a -> b -> b) -> b -> [a] -> b
lista de listas usando a funca
o da funca
o inverte1 :: [a] -> [a] que inverte uma lista
18. Escreva a definica
o foldr:(a -> b -> b) -> b -> [a] -> b
usando a funca

String -> Bool Exemplo:

palindromo "ana"== True


palindromo "123a321"== True
palindromo "cachorro"== False
es last:: [a] -> a e init :: [a] -> [a].
Dica: Use as funco
o recursiva da funca
o rotEsq que recebe um natural n e uma lista
6. Escreva a definica
` esquerda.
generica e retorna uma lista rotacionada n vezes a
rotEsq ::

o recursiva:
Dica: Considere a seguinte definica
i n v e r t e : : [ a ] > [ a ]
inverte [] = []
i n v e r t e xs = ( l a s t xs ) : i n v e r t e ( i n i t xs )

Int -> [a] -> [a]

Exemplo:
rotEsq 0 "asdfg"== "asdfg"

o da funca
o inverte2 :: [a] -> [a] que inverte uma lista
19. Escreva a definica
o foldl::(b -> a -> b) -> b -> [a] -> b
usando a funca

rotEsq 1 "asdfg"== "sdfga"

o recursiva:
Dica: Considere a seguinte definica

rotEsq 2 "asdfg"== "dfgas"


o recursiva da funca
o rotDir que recebe um natural n e uma lista
7. Escreva a definica
` direita.
generica e retorna uma lista rotacionada n vezes a
rotDir ::

i n v e r t e : : [ a ] > [ a ]
inverte [] = []
i n v e r t e ( x : xs ) = i n v e r t e xs ++ [ x ]

Int -> [a] -> [a]

Exemplo:

o mystery faz?
20. O que a funca

rotDir 0 "asdfg"== "asdfg"

mystery xs = f o l d r (++) [ ] (map s i n g xs )


sing x = [x]

rotDir 1 "asdfg"== "gasdf"


rotDir 2 "asdfg"== "fgasd"
o recursiva da funca
o uniao:
8. Escreva a definica

o da funca
o elem :: Eq a => a -> [a] -> Bool que testa se
21. Escreva a definica
o any.
um valor ocorre em uma lista usando a funca

o de chaves
INPUT: Duas listas a e b sem repetica

Dica: Crie uma lista de testes x==y tal que y e um elemento da lista.
o insertSort :: Ord a => [a] -> [a] para
22. Mostre que pode definir funca
o usando foldr e insert.
ordenar uma lista pelo metodo de inserca
o map f :: [a] -> [a] usando a funca
o foldr.
23. Redefina a funca
o filter p :: [a] -> [a] usando a funca
o foldr.
24. Redefine a funca
es foldl1 e foldr1 do prel
25. As funco
udio-padr
ao s
ao variantes de foldl e foldr que
s
o est
ao definidas para listas com pelo menos um elemento (i.e. n
ao-vazias).foldl1
o de agregaca
o e uma lista) e
e foldr1 tem apenas dois argumentos (uma operaca
es seguintes.
o seu resultado e dado pelas equaco

o
OUTPUT: Lista das chaves de a e b sem repetica
Exemplos:
uniao [1,2,3] [2,4,6] == [1,2,3,4,6]
uniao [4,5] [1] == [4,5,1]
o elemento
Use a funca
o recurdiva somaDigitos ::
9. Defina uma funca
dos dgitos de um n
umero.

Ord a => [a] -> a que

Int -> Int que retorna a soma

f oldl1()[x1 , . . . , xn ] = (. . . (x1 x2 ) x3 . . .) xn

A soma dos dgitos do n


umero zero e zero.

f oldr1()[x1 , . . . , xn ] = x1 (. . . (xn1 xn ) . . .)
es maximo, minimo :: Ord a => [a] -> a do
Mostre que pode definir as funco
prel
udio-padr
ao (que calculam, respectivamente, o maior e o menor elemento duma
lista n
ao-vazia) usando foldl1 e foldr1 .
o n
o isSorted que retorna verdadeiro se a
26. Escreva a definica
ao-recursiva da funca
o all.
lista est
a ordenada e falso, caso contr
ario usando a funca

ltimo dgito mais a soma dos dgitos


A soma dos dgitos do n
umero n e o u
ltimo dgito.
do n
umero formado sem o u
Exemplo :
somaDigitos 234 == 9
o recursiva da funca
o binario :: Int -> [Int] que calcula
10. Escreva uma definica
o de um inteiro positivo em algarismos bin
a representaca
arios (0 ou 1). A
lista resultado deve estar ordenada do algarismo mais significativo para o menos
significativo.

isSorted ::

Ord a => [a] -> Bool

Dica: Crie uma lista com todos os pares adjacentes (x,y) e teste se em todos os pares
x<=y e verdadeiro.

Exemplo: binario 6 = [1, 1, 0]