Scrivi una funzione, f
che accetta un numero intero positivo e restituisce una funzione.
La nuova funzione restituita dovrebbe essere identica a f
. Tuttavia, quando si verifica la "chiamata di terminazione", f
dovrebbe invece restituire la somma di tutti i numeri interi passati.
Ad esempio, g=f(4)
(se f
è la prima funzione) dovrebbe essere impostato g
su un'altra funzione. h=g(3)
farà lo stesso. Tuttavia, quando si chiama h
senza argomenti (vedere di seguito per i dettagli), dovrebbe essere visualizzato 7, poiché questa è la somma degli argomenti della funzione precedente. In altre parole, f(3)(4)() == 7
.
Si noti che questo non è lo stesso di f(3,4)()
.
"Termination call" è una delle seguenti opzioni (a scelta):
- chiama senza argomenti
- null come argomento
- qualsiasi valore non positivo
È necessario supportare un numero arbitrario di chiamate di funzione, non esiste un limite predefinito.
È garantito che la somma totale non sarà maggiore di 1'000.
Possiamo presumere che sia stata effettuata almeno una chiamata prima della "chiamata di terminazione".
Il tuo codice non dovrebbe usare variabili statiche per programma, quindi dovrebbe essere possibile eseguire l'esperimento più volte nello stesso runtime e osservare esattamente lo stesso comportamento.
Esempi:
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)
restituisce una nuova funzione. Se quella nuova funzione viene chiamata senza argomenti, restituisce4
, ma se viene chiamata con un altro argomento, restituirà nuovamente una nuova funzione con la stessa semantica ma con il nuovo argomento aggiunto a4
e così via.