Exercícios de CI062 - Paradigmas de programação

1) Explique qual é a implicação principal de considerar funções como entidades de primeira classe.

2) Crie um conjunto de funções que:
a) realizem as 4 operações aritméticas de base: adição, subtração, multiplicação e divisão.
b) uma função genérica que recebe estas 4 funções como parâmetro e que execute uma soma dos resultados dessas funções. As 4 funções podem ser executadas em qualquer ordem.
c) Dê dois exemplos diferentes de aplicação da função genérica.

3) Crie uma função que receba como parâmetro uma lista de caracteres com e que retorne:
- 1 se todos as strings começarem com a letra 'a' (usar função Boolean startsWith(String s)).
- 2 se a lista possui quatro elementos, a primeira e a quarta strings forem “a” e “d”, respectivamente.
- 3 caso contrário

4) Crie uma função que recebe como parâmetro uma lista de salários e que retorne apenas os salários menores que 5000.

5) Transforme a função soma3( a, b, c : Int) : Int = a +b +c em funções com parâmetros únicos (currying). Implemente também uma chamada da função.

6) Crie uma função que mapeie 4 inteiros em um único elemento formado pelos 4 inteiros, sendo que cada inteiro deve ser incrementado de 1.

7) Crie uma chamada de função que receba uma lista de inteiros L como parâmetro e que retorna a soma de todos os número múltiplos de K. Mostre a avaliação desta chamada, para o parâmetro L = List(20, 25, 12, 4, 40) e K = 10.

8) Considere a função verifica, que recebe como entrada uma lista de inteiros L1, uma função de verificação F:(Int=>Boolean) e um acumulador (o tipo deverá ser escolhido na implementação). A avaliação desta função verifica retorna verdadeiro se pelo menos 1 elemento da lista L1 for avaliado como verdadeiro após aplicação da função de verificação. Implemente uma função verifica usando recursão terminal.

9)Considere a função filtragem, que recebe como entrada dois parâmetros: uma lista L e uma função F:(Any=>Boolean). A função deverá retornar uma nova lista, apenas com os elementos para os quais a avaliação da função F será verdadeira.

a) Implemente uma função filtragem usando recursão.
b) Qual o tipo de recursão usada? Explique o porquê desta escolha.
c) Dê um exemplo de chamada da função criada.