Programação Funcional

Propaganda
04.prog.func.nb
1
Programação Funcional
Nos exercícios que se seguem não deve utilizar recursão nem composição
sequencial de comandos (;). As suas funções devem ser definidas
utilizando as funções primitivas Apply, Map, MapThread, Nest e
FixedPoint, podendo também recorrer a outras funções sobre listas que
considere necessárias.
Cada exercício sobre listas pode (e deve) ser resolvido de várias maneiras
diferentes; em particular, um bom exercício é apresentar para cada
problema uma solução recorrendo à função FixedPoint (note que muitas
vezes esta não é, no entanto, a melhor solução).
Defina funcionalmente em Mathematica as seguintes funções.
† somaNat: recebe um número natural n e devolve a soma de todos os naturais até n.
somaNat@6D
21
† quadrados: recebe um número natural n e devolve a lista dos quadrados dos naturais até n (exclusivé).
quadrados@6D
80, 1, 4, 9, 16, 25<
† quadradosinv: recebe um número natural n e devolve a lista dos quadrados perfeitos até n, por ordem
decrescente.
quadradosinv@6D
836, 25, 16, 9, 4, 1<
† inverteLista: recebe uma lista e devolve a mesma lista mas invertida.
inverteLista@81, 2, 3, 4<D
84, 3, 2, 1<
04.prog.func.nb
† indicesPares: recebe uma lista de inteiros w e devolve a lista dos elementos de w em posições pares.
indicesPares@82, 3, 4, 5, 6<D
83, 5<
† triangulo: recebe como argumento um natural n e devolve uma lista em que o primeiro elemento é a
lista {1}, o segundo a lista {1,2}, ... , o n-ésimo elemento é a lista com todos os naturais até n.
triangulo@4D
881<, 81, 2<, 81, 2, 3<, 81, 2, 3, 4<<
† prodLista: recebe uma lista de inteiros e devolve o produto dos seus elementos.
prodLista@82, 1, −5, 2<D
−20
† conta: recebe como argumentos uma lista de inteiros w e um inteiro k e devolve o número de vezes que
k ocorre em w.
conta@81, 2, 3, 1, 2, 3<, 2D
2
† pertenceQ: recebe uma lista de inteiros w e um inteiro k e devolve True sse k ocorre em w.
pertenceQ@83, 4, 5, 6, 7, 5<, 8D
False
pertenceQ@83, 4, 5, 6, 7, 5<, 7D
True
† listaPrimosQ:recebe uma lista de naturais w e devolve True sse w só contém números primos.
listaPrimosQ@81, 2, 3, 4<D
False
listaPrimosQ@82, 5, 3<D
True
† IntListQ: verifica se o argumento é uma lista de inteiros.
IntListQ@82, 3, 6, 3<D
True
2
04.prog.func.nb
IntListQ@84, s, "banana", Function@x, xD<D
False
IntListQ@MatrixQD
False
† NatListQ: verifica se o argumento é uma lista de naturais.
NatListQ@82, 3, 6, 3<D
True
NatListQ@82, −3, 6, 3<D
False
NatListQ@84, s, "banana", Function@x, xD<D
False
† IntListListQ: verifica se o argumento é uma lista de listas de inteiros.
IntIntListQ@82, 3, 6, 3<D
False
IntIntListQ@882, 3, 6, 3<<D
True
IntIntListQ@882, 5<, 8−3<, 8<<D
True
† StringMatrixQ: verifica se o argumento é uma matriz de strings.
StringMatrixQ@88"banana", "maçã"<, 8"laranja", "pêssego"<<D
True
StringMatrixQ@88"a", "b"<, 8"c"<<D
False
StringMatrixQ@8"blah"<D
False
† permutacao: recebe duas listas w1 e w2 e devolve True se w2 for uma permutação de w1 e False caso
contrário.
permutacao@81, 2, 3<, 82, 1, 3<D
True
3
04.prog.func.nb
4
permutacao@81, 2, 3<, 81, 2, 2, 3<D
False
permutacao@82, 4<, 82<D
False
† comprimento: recebe uma lista e devolve o seu comprimento.
comprimento@81, 2, 3, 4<D
4
† junta: recebe duas listas e devolve a sua concatenação.
junta@81, 2, 3<, 89, 8, 7<D
81, 2, 3, 9, 8, 7<
† intercala: recebe duas listas w1 e w2 e devolve a lista resultante de intercalar os elementos de w1 e w2.
intercala@83, 2, 1<, 8a<D
83, a, 2, 1<
intercala@86, 4<, 85, 6, 7<D
86, 5, 4, 6, 7<
intercala@83, 2, 1<, 85, 6, 7<D
83, 5, 2, 6, 1, 7<
† apaga: recebe uma lista w e um número inteiro k e devolve a lista que resulta de se apagar de w todas as
ocorrências de k.
apaga@81, 2, 3, 2, 1, 2<, 1D
82, 3, 2, 2<
† posPrimos: recebe uma lista de inteiros e devolve a lista das posições onde ocorrem números primos.
posPrimos@82, 7, 6, 5, 7<D
81, 2, 4, 5<
† posMax: recebe uma lista de inteiros e devolve a lista das posições onde ocorre o maior elemento.
posMax@82, 7, 6, 5, 7<D
82, 5<
04.prog.func.nb
† indPrimos: recebe uma lista de listas de inteiros l={l1,l2,...,lk} e devolve a lista w={w1,w2,...,wk}, em
que wi é composta pelas posições dos números primos em li.
indPrimos@881, 2, 3, 4, 5<, 82, 4, 3, 5<, 84, 6, 8, 9<, 8<<D
882, 3, 5<, 81, 3, 4<, 8<, 8<<
† fibonacci: recebe como argumento um natural n e devolve o n-ésimo número de Fibonacci.
(A sucessão dos números de Fibonacci define-se recursivamente da seguinte forma:
- fibonacci[1]=1;
- fibonacci[2]=1;
- fibonacci[n+2]=fibonacci[n+1]+fibonacci[n].)
fibonacci@6D
8
5
Download