Escriba una función, f
que tome un entero positivo y devuelva una función.
La nueva función devuelta debe ser idéntica a f
. Sin embargo, cuando ocurre la "llamada de terminación", f
debería devolver la suma de todos los enteros pasados.
Por ejemplo, g=f(4)
(si f
es la primera función) debería establecerse g
en otra función. h=g(3)
Hará lo mismo. Sin embargo, cuando llama h
sin argumentos (consulte los detalles a continuación), debería generar 7, ya que es la suma de los argumentos de la función anterior. Dicho de otra manera, f(3)(4)() == 7
.
Tenga en cuenta que esto no es lo mismo que f(3,4)()
.
La "llamada de terminación" es una de las siguientes opciones (su elección):
- llamar sin argumentos
- nulo como argumento
- cualquier valor no positivo
Se debe admitir una cantidad arbitraria de llamadas a funciones, no hay un límite predefinido.
Se garantiza que la suma total no será mayor a 1'000.
Podemos suponer que se realiza al menos una llamada antes de la "llamada de terminación".
Su código no debe usar variables estáticas por programa, por lo que debería ser posible ejecutar el experimento varias veces en el mismo tiempo de ejecución y observar exactamente el mismo comportamiento.
Ejemplos:
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)
devuelve una nueva función. Si esa nueva función se llama sin argumentos, regresa4
, pero si se llama con otro argumento, nuevamente devolverá una nueva función con la misma semántica pero con el nuevo argumento agregado al4
y así sucesivamente.