#python #closures
#python #замыкания
Вопрос:
Может кто-нибудь, пожалуйста, помочь мне понять, как работает приведенный ниже код? Цель этого кода состоит в том, чтобы взять два элемента, сделать их парой, функция car возвращает первый элемент, а функция cdr возвращает последний элемент.
У меня возникли проблемы с пониманием того, как именно работает закрытие. Я понимаю, как работает лямбда, но все еще возникают проблемы со следующим:
- пошаговый поток этого кода
- почему pair(f) принимает только один вход, где он предназначен для приема 2 элементов и превращения их в пару
- что означает f(a, b) (почему f перед круглыми скобками?)
Заранее большое вам спасибо!
def cons(a, b):
def pair(f):
return f(a, b)
return pair
def car(pair):
return(pair(lambda a,b: a))
def cdr(pair):
return(pair(lambda a,b: b))
p = cons("a","b")
print(car(p))
Комментарии:
1.
cons
это функция, которая принимает два значения и возвращает функцию. Эта функция принимает один параметр. Предполагается, что этот параметр должен быть функцией (f
) , которую он вызовет и передаст ей два параметра (те, которыеcons
были приняты).
Ответ №1:
Первый,
p = cons("a","b")
поскольку in cons
возвращает pair
, он функционально эквивалентен
def p(f):
return f("a", "b")
затем,
print(car(p))
Которые развиваются в
print(p(lambda a,b: a))
и это становится
print((lambda a,b: a)("a", "b"))
и становится
print("a")