Верните из add(a) функцию, которая принимает b и использует a из замыкания. Вызов add(a)(b) вычислит a + b; промежуточную функцию можно переиспользовать.
Каррированное сложение (Curried Add)
Верните из add(a) функцию, которая принимает b и использует a из замыкания. Вызов add(a)(b) вычислит a + b; промежуточную функцию можно переиспользовать.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Каррированное сложение (Curried Add)
Условие:
Реализуйте функцию add(a), которая принимает одно число и возвращает другую функцию, принимающую второе число. Итоговый вызов возвращает сумму двух чисел.
Входные данные: два числа a и b, передаваемые через каррирование: add(a)(b)
Выходные данные: число — сумма a + b
Ограничения:
- -10^6 <= a, b <= 10^6
- a и b — целые числа
Пример:
Вход: add(3)(5) Выход: 8
Вход: add(-1)(1) Выход: 0
Ответ
Верните из add(a) функцию, которая принимает b и использует a из замыкания. Вызов add(a)(b) вычислит a + b; промежуточную функцию можно переиспользовать.
def add(a):
def add_second(b):
return a + b
return add_second
add(3)(5) # 8
add(-1)(1) # 0
Краткий эквивалент — def add(a): return lambda b: a + b. Для заданного диапазона целых время и дополнительная память постоянные. Это каррирование функции двух аргументов, а не накопление произвольной цепочки вызовов.