Я пытаюсь самостоятельно изучить Python и CS, используя онлайн-курс, основанный на SICP. Я понимаю основы церковных цифр, но у меня возникают проблемы с добавлением церковных цифр с использованием лямбда-функций в python.
Это мой код ниже для контекста:
def zero(f):
return lambda x: x
def successor(n):
return lambda f: lambda x: f(n(f)(x))
def one(f):
"""Church numeral 1."""
return lambda x: f(x)
def two(f):
"""Church numeral 2."""
return lambda x: f(f(x))
def church_to_int(n):
"""Convert the Church numeral n to a Python integer.
>>> church_to_int(zero)
0
>>> church_to_int(one)
1
>>> church_to_int(two)
2
"""
return n(lambda x: x + 1)(0)
def mul_church(m, n):
"""Return the Church numeral for m * n, for Church numerals m and n.
>>> three = successor(two)
>>> four = successor(three)
>>> church_to_int(mul_church(two, three))
6
>>> church_to_int(mul_church(three, four))
12
"""
return lambda x: m(n(x))
Это функция add_church, с которой у меня возникли проблемы:
def add_church(m, n):
"""Return the Church numeral for m + n, for Church numerals m and n.
>>> three = successor(two)
>>> church_to_int(add_church(two, three))
5
"""
return lambda f: lambda x: m(f(x))(n(x))
Я пришел к выводу, что способ добавления церковных цифр состоит в том, чтобы каким-то образом сделать так, чтобы одна из функций в add_church(m, n) была входом или «x» в другой лямбда-функции. Однако я продолжаю получать ошибки, которые означают, что я не использую правильные аргументы в вызове функции.
Например, когда я звоню:
church_to_int(add_church(one, two))
Среди прочего я получаю сообщение об ошибке "int object not callable", а также безуспешно пробовал другие методы.
Я думаю, что есть что-то, чего я не вижу в лямбда-функциях, из-за чего у меня возникают проблемы с реализацией add_church. Я потратил некоторое время на выяснение этого, поэтому любая помощь, которая поможет мне найти ответ, будет очень признательна.