Напишите функцию, f
которая принимает положительное целое число и возвращает функцию.
Возвращенная новая функция должна быть идентичной f
. Однако, когда происходит «вызов завершения», f
вместо этого следует возвращать сумму всех переданных целых чисел.
Например, g=f(4)
(если f
первая функция) должна установить g
другую функцию. h=g(3)
будет делать то же самое. Однако, когда вы вызываете h
без аргументов (см. Подробности ниже), он должен вывести 7, так как это сумма предыдущих аргументов функции. Другими словами f(3)(4)() == 7
.
Обратите внимание, это не то же самое, что f(3,4)()
.
«Прекращение вызова» является одним из следующих вариантов (на ваш выбор):
- вызов без аргументов
- ноль в качестве аргумента
- любое неположительное значение
Произвольное количество вызовов функций должно поддерживаться, предопределенного ограничения нет.
Гарантируется, что общая сумма не будет больше 1000.
Мы можем предположить, что перед «завершением вызова» сделан хотя бы один вызов.
Ваш код не должен использовать статические переменные для каждой программы, поэтому должна быть возможность многократно запускать эксперимент в одно и то же время выполнения и наблюдать одно и то же поведение.
Примеры:
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)
возвращает новую функцию. Если эта новая функция вызывается без аргументов, она возвращается4
, но если она вызывается с другим аргументом, она снова возвращает новую функцию с той же семантикой, но с новым аргументом, добавленным к4
и так далее.