Функции высшего порядка на Python

Мне дают список функций и просят определить plus(x,y) с add1 и repeated. plus — это функция, которая принимает два числа и возвращает их сумму. Однако я не могу получить никакого результата с моим определением. Он просто дает имя функции. Любая помощь приветствуется!

add1 = lambda x: x + 1

def compose(f, g):
return lambda x: f(g(x))

def repeated(f, n):
    if n == 0:
        return lambda x: x
    else:
        return compose(f, repeated(f, n - 1)) 

def plus(x, y):
    return repeated(add1, y)

person aijnij    schedule 17.02.2018    source источник
comment
Можете ли вы показать, как вы используете функции?   -  person Misael Alarcon    schedule 17.02.2018
comment
Где вы используете x в plus?   -  person Blender    schedule 17.02.2018
comment
тестовые примеры: plus() с любыми двумя целыми числами, plus(1,3), plus(2,5) и т. д.   -  person aijnij    schedule 17.02.2018


Ответы (2)


Это интересный способ сделать дополнение. Это работает довольно хорошо, вы просто упустили одну вещь. Repeated возвращает функцию, которая даст сумму, а не саму сумму. Так что вам просто нужно позвонить repeated(add1, y) на x вот так

def plus(x, y):
    return repeated(add1, y)(x)

Остальной код работает нормально.

person Sam Craig    schedule 17.02.2018

Дело в том, что plus возвращает функцию, поэтому вы видите имя функции вместо числового значения. Я думаю, именно поэтому в plus есть параметр x. Просто измените эту строку кода на

return repeated(add1, y)(x)

Это оценит функцию возврата repeated со значением в x.

Итак, используя

plus(5, 1)

>> 6

person Misael Alarcon    schedule 17.02.2018