Ecrivez une fonction f
qui prend un entier positif et retourne une fonction.
La nouvelle fonction renvoyée doit être identique à f
. Cependant, lorsque "l'appel de terminaison" se produit, f
doit plutôt renvoyer la somme de tous les entiers passés.
Par exemple, g=f(4)
(si f
est la première fonction) doit être défini g
sur une autre fonction. h=g(3)
va faire la même chose. Cependant, lorsque vous appelez h
sans argument (voir ci-dessous pour plus de détails), il doit générer 7, car c'est la somme des arguments de la fonction précédente. Autrement dit, f(3)(4)() == 7
.
Notez que ce n'est pas la même chose que f(3,4)()
.
"Appel de terminaison" est l’une des options suivantes (à vous de choisir):
- appel sans arguments
- null comme argument
- toute valeur non positive
Une quantité arbitraire d'appels de fonction doit être prise en charge, il n'y a pas de limite prédéfinie.
Il est garanti que la somme totale ne sera pas supérieure à 1'000.
Nous pouvons supposer qu'il y a au moins un appel passé avant "l'appel de terminaison".
Votre code ne doit pas utiliser de variables statiques, par programme. Il doit donc être possible d'exécuter le test plusieurs fois au cours de la même exécution et d'observer exactement le même comportement.
Exemples:
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)
renvoie une nouvelle fonction. Si cette nouvelle fonction est appelée sans arguments, elle retourne4
, mais si elle est appelée avec un autre argument, elle retournera à nouveau une nouvelle fonction avec la même sémantique mais avec le nouvel argument ajouté à4
and etc..