Escreva uma função f
,, que obtenha um número inteiro positivo e retorne uma função.
A nova função retornada deve ser idêntica a f
. No entanto, quando a "chamada de encerramento" ocorrer, f
deve retornar a soma de todos os números inteiros passados.
Por exemplo, g=f(4)
(se f
é a primeira função) deve ser definida g
para outra função. h=g(3)
fará o mesmo. No entanto, quando você chama h
sem argumentos (veja os detalhes abaixo), ele deve gerar 7, pois é a soma dos argumentos da função anterior. Dito de outra maneira f(3)(4)() == 7
.
Observe que isso não é o mesmo que f(3,4)()
.
"Chamada de encerramento" é uma das seguintes opções (sua escolha):
- chamar sem argumentos
- nulo como argumento
- qualquer valor não positivo
A quantidade arbitrária de chamadas de função deve ser suportada, não há limite predefinido.
É garantido que a soma total não será maior que 1'000.
Podemos assumir que existe pelo menos uma chamada antes da "chamada de encerramento".
Seu código não deve usar variáveis estáticas por programa, portanto, deve ser possível executar o experimento várias vezes no mesmo tempo de execução e observar exatamente o mesmo comportamento.
Exemplos:
f(1)() == 1
f(4)(2)(7)() == 13
f(4)(2)(7)(5)(2)() == 20
q = f(2)(3); b = f(1)(2)(3); q(); b()
?
f(4)
retorna uma nova função. Se essa nova função for chamada sem argumentos, ela retornará4
, mas se for chamada com outro argumento, ela retornará novamente uma nova função com a mesma semântica, mas com o novo argumento adicionado ao4
e assim por diante.