Закрытие для простого варианта использования - PullRequest
3 голосов
/ 30 марта 2019

Я не понимаю следующий вопрос практического собеседования:

cons(a, b) создает пару, а car(pair) и cdr(pair) возвращают первый и последний элемент этой пары. Например, car(cons(3, 4)) возвращает 3, а cdr(cons(3, 4)) возвращает 4.

Учитывая эту реализацию минусов:

def cons(a, b):
    def pair(f):
        return f(a, b)
    return pair

Реализация машины и CDR.

Каково практическое применение этого?

1 Ответ

1 голос
/ 30 марта 2019

Cons - это функция, которая принимает 2 аргумента и возвращает функцию, которая применяет функцию к паре, поэтому мы можем собрать car и cdr в одном и том же fasion:

def car(pair):
    def unpack(a, b):
        return a
    return pair(unpack)


def cdr(pair):
    def unpack(a, b):
        return b
    return pair(unpack)

Это пример / упражнение, которое приходит из функционального программирования, в котором все может быть абстрагировано от функций (просто говоря). Он имеет реальное использование с языками, например Haskell или Racket. Но я не думаю, что это должен быть действительно готовый вариант для Python (IMO).

Как видите, в коде нет переменных, кроме самих аргументов:

>>> car(cons(1, 2))
1
>>> cdr(cons(1, 2))
2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...