Напишите функцию, 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и так далее.