Nome: ? | Matrícula: ?

Revisão de programação funcional

Orientação

Para cada questão, você deve escrever no mínimo dois casos de teste, que devem ser submetidos junto com a questão. Os casos de teste devem ser escritos na seguinte forma:

// formato:
teste(resultadoEsperado, chamadaAFuncao);

// exemplo:
teste(120, fatorial(6));

Em Lisp a lógica é a mesma:

(teste 120 (fatorial 6))

O resultado da execução dos testes aparece no console do navegador.

Questão 1

Considere a seguinte estrutura de dados:

[
  {
    nome: "Fulano",
    turma: "01",
    nota: 8,
  },
  {
    nome: "Sicrano",
    turma: "02",
    nota: 5,
  },
  ...
]

Escreva uma função em JavaScript que recebe dados nessa estrutura e o número de uma turma e retorna a média das notas dos alunos que dessa turma. Não use estruturas de repetição (for, while, do) ou recursão. Use as funções alta ordem R.map, R.filter e R.reduce.

function(str, info) { return simplesEval(str, info); }

Questão 2

Escreva uma função em JavaScript que recebe um predicado e uma lista, e retorna o número de elementos na lista que satisfazem ao predicado. Use recursão profunda.

Dicas:

function(str, info) { return simplesEval(str, info); }

Questão 3

Escreva uma função em Lisp para calcular a soma de todos os elementos de uma lista de números (não-profunda). Assuma que uma lista vazia tem soma zero. Use recursão de cauda.

function(str, info) { return multiEvalLisp(str, info); }

Questão 4

Considere o código abaixo. Modifique a função main para que ela passe a considerar o nome passado como parâmetro, conforme exemplificado no teste.

function(str, info) { return simplesEval(str, info); }

Questão 5

Preencha os parâmetros de R.pipe no código-fonte abaixo para que a função maximo retorne o maior valor ímpar da lista.

function(str, info) { return simplesEval(str, info); }