Napisz funkcję, f
która przyjmuje dodatnią liczbę całkowitą i zwraca funkcję.
Nowa zwrócona funkcja powinna być identyczna z f
. Jednak gdy nastąpi „wywołanie zakończenia”, f
zamiast tego należy zwrócić sumę wszystkich przekazanych liczb całkowitych.
Na przykład g=f(4)
(jeśli f
jest to pierwsza funkcja) należy ustawić g
na inną funkcję. h=g(3)
zrobi to samo. Jednak gdy wywołujesz h
bez argumentów (szczegóły poniżej), powinien on wypisać 7, ponieważ jest to suma poprzednich argumentów funkcji. Innymi słowy, f(3)(4)() == 7
.
Pamiętaj, że to nie to samo co f(3,4)()
.
„Połączenie kończące połączenie” to jedna z następujących opcji (do wyboru):
- wywołanie bez argumentów
- zerowy jako argument
- wszelkie wartości dodatnie
Należy obsłużyć dowolną liczbę wywołań funkcji, nie ma z góry określonego limitu.
Gwarantujemy, że całkowita suma nie będzie większa niż 1 000.
Możemy założyć, że przed „połączeniem kończącym” wykonano co najmniej jedno połączenie.
Twój kod nie powinien używać statycznych zmiennych dla poszczególnych programów, więc powinno być możliwe przeprowadzenie eksperymentu wiele razy w tym samym środowisku wykonawczym i obserwowanie dokładnie tego samego zachowania.
Przykłady:
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)
zwraca nową funkcję. Jeśli ta nowa funkcja zostanie wywołana bez argumentów, zwróci4
, ale jeśli zostanie wywołana z innym argumentem, ponownie zwróci nową funkcję z tą samą semantyką, ale z dodanym nowym argumentem4
i tak dalej.