ПРЕДУПРЕЖДЕНИЕ ВПЕРЕД: Материал, представленный ниже, может быть непрактичным!
На самом деле, cons
не обязательно должен быть примитивным в Лиспе, вы можете построить его с помощью λ.Подробнее см. Использование лямбды для определения cons / car / cdr в SICP .В Python это переводится как:
def cons(x, y):
return lambda pair: pair(x, y)
def car(pair):
return pair(lambda p, q: p)
def cdr(pair):
return pair(lambda p, q: q)
Теперь car(cons("a", "b"))
должно дать вам 'a'
.
Как это?Схема префикса:)
Очевидно, вы можете начать построение списка, используя cdr
рекурсию.Вы можете определить nil
как пустую пару в Python.
def nil(): return ()
Обратите внимание, что вы должны связать переменную, используя =
в Python.Я прав?Поскольку он может изменять переменную, я бы лучше определил постоянную функцию.
Конечно, это не Pythonic, а Lispy, не такой практичный, но элегантный.
Упражнение: реализовать библиотеку списков http://srfi.schemers.org/srfi-1/srfi-1.html Схемы в Python.Шучу:)