Schreiben Sie eine Funktion, f
die eine positive Ganzzahl aufnimmt und eine Funktion zurückgibt.
Die zurückgegebene neue Funktion sollte mit identisch sein f
. Wenn jedoch der "Beendigungsaufruf" auftritt, f
sollte stattdessen die Summe aller übergebenen Ganzzahlen zurückgegeben werden.
Zum Beispiel sollte g=f(4)
(wenn f
ist die erste Funktion) auf g
eine andere Funktion eingestellt werden. h=g(3)
werde das gleiche tun. Wenn Sie jedoch h
keine Argumente aufrufen (siehe unten für Details), sollte 7 ausgegeben werden, da dies die Summe der vorherigen Funktionsargumente ist. Anders ausgedrückt f(3)(4)() == 7
.
Beachten Sie, dass dies nicht dasselbe ist wie f(3,4)()
.
"Terminierungsanruf" ist eine der folgenden Optionen (Ihre Wahl):
- Aufruf ohne Argumente
- Null als Argument
- ein nicht positiver Wert
Beliebig viele Funktionsaufrufe sollen unterstützt werden, es gibt kein vordefiniertes Limit.
Es ist garantiert, dass die Gesamtsumme nicht größer als 1'000 sein wird.
Wir können davon ausgehen, dass vor dem "Terminierungsanruf" mindestens ein Anruf getätigt wird.
In Ihrem Code sollten keine statischen programmspezifischen Variablen verwendet werden. Daher sollte es möglich sein, das Experiment mehrere Male in derselben Laufzeit auszuführen und genau dasselbe Verhalten zu beobachten.
Beispiele:
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)
eine neue Funktion zurückgegeben wird. Wenn diese neue Funktion ohne Argumente aufgerufen wird, wird sie zurückgegeben4
. Wenn sie jedoch mit einem anderen Argument aufgerufen wird, wird erneut eine neue Funktion mit der gleichen Semantik zurückgegeben, jedoch mit dem neuen Argument, das dem4
usw. hinzugefügt wurde .