Каково происхождение и значение фразы «лямбда-предельная»?


43

Я возился с функциональными языками программирования в течение нескольких лет, и я продолжаю сталкиваться с этой фразой. Например, это глава «Маленький интриган», которая определенно предшествует блогу с таким названием. (Нет, эта глава не поможет ответить на мой вопрос.)

Я понимаю, что означает лямбда, идея анонимной функции проста и мощна, но я не понимаю, что означает «предельное» в этом контексте.

Места, в которых я видел эту фразу:

  1. Название главы 8 Маленького интриганка
  2. Блог: http://lambda-the-ultimate.org/
  3. Серия работ «Лямбда - абсолютный X»: http://library.readscheme.org/page1.html

Я чувствую, что здесь отсутствует ссылка, кто-нибудь может помочь?


1
Похоже, это название популярного блога, но если есть другой исторический источник, мне интересно ...
Klaim

1
Можете ли вы дать некоторые ссылки на места, где вы видели эту фразу? Этот контекст был бы чрезвычайно полезен при поиске ответа.
Адам Кроссленд

@Adam - добавил несколько ссылок.
Эрик Уилсон,

Ссылка серии статей перенаправляет на cultureua.com. Может кто-нибудь предоставить обновленную ссылку, пожалуйста?
tejasbubane

Ответы:


47

Да, это просто повторяющаяся фраза в названии нескольких статей, начиная с пары в 70-х годах, когда Суссман и Стил демонстрируют использование лямбда-исчисления для программирования с помощью минималистского диалекта Лиспа, названного « Схема », который они разработали для цель. Вы можете найти сами газеты здесь ; они интересны и удивительно актуальны.

Я не уверен, если это когда-либо явно указано, но ясно (из контекста, прочитав статьи и зная общие сведения и исследовательские интересы авторов), эта фраза является просто броским лозунгом для их утверждения, что лямбда-абстракции как вычислительный примитив, они не только универсальны в формальном смысле (способность кодировать любую программу каким-либо образом, даже неудобно), но и универсальны в практическом смысле, что любая и каждая конструкция присутствует в других языках, даже те, которые Воплощенный с нуля, может быть переопределён на лямбда-языке таким образом, чтобы он был эффективным и естественным для использования.

Повторяющаяся фраза приводит к очевидной обобщенной форме «для всех X, лямбда - это конечный X», в этом смысле я обычно использовал «Lambda the Ultimate» как название блога, отмечая, что LtU имеет отношение к языку программирования. дизайн и теория. По иронии судьбы, LtU, вероятно, также будет одним из лучших мест, где можно найти человека, который мог бы рассказать вам о том, что лямбда не является окончательной реализацией. :]

Также обратите внимание, что Суссман является одним из авторов SICP , очень влиятельного учебника, который также использует язык Scheme и проводит довольно много времени, представляя лямбда-абстракции как концепцию.


2
+1 за поиск этих классических статей. Гай Л. Стил-младший также в значительной степени написал книгу об Common LISP . LISP и Scheme не были концом пути для Гая, который продолжал вносить свой вклад в J , Fortress и другие языки. Гай также участвовал в « Жаргон-файлике» и словаре хакера .
Джон Тоблер,

@ Джон Тоблер: Так и есть! Я сосредоточился только на Суссмане, потому что он, казалось, был больше вовлечен в Схему, которая тесно связана с Лямбда-Пейперс. Не хотел создавать впечатление, что Стил больше ничего не делал, поскольку это далеко не так. :]
CA McCann

28

Лямбда The Ultimate относится к идее, что лямбда-лямбда-исчисление может эффективно реализовать каждую встроенную концепцию в каждом языке программирования, в прошлом, настоящем и будущем. Классы, модули, пакеты, объекты, методы, управляющий поток, структуры данных, макросы, продолжения, сопрограммы, генераторы, списки, потоки и т. Д.

Как это происходит, эта высшая природа включает в себя стоять за анонимную функцию. Но лямбды по своей сути не ограничиваются только анонимными функциями. Их учат таким образом, но сущность лямбды гораздо глубже, чем математические функции без имен. Другими словами, я не согласен с:

Я понимаю, что означает лямбда, идея анонимной функции проста и мощна, но я не понимаю, что означает «предельное» в этом контексте.

С практической точки зрения, использование лямбд в качестве синтаксических абстракций («макросы»), которые не являются вызовом по значению / аппликативным (какими являются математические функции), абсолютно необходимо для понимания того, что лямбды действительно могут служить ядро каждой системы обработки языка программирования.

Для теории: Существует интересная связь с парадоксом Бертрана Рассела и аксиомами понимания (и расширения) в наивной теории множеств. Лямбда для функций - это то же самое, что и нотации для конструктора множеств. Лямбда - это нотация для конструктора функций. Существует важное различие, обычно игнорируемое, между (лямбда (x) (* xx)) и тем, к чему это приводит (функция, которая возводит в квадрат). Если не удается провести различие между этими двумя понятиями в целом, то есть между нотацией и обозначением (ошибка, которую совершили и Черч, и Фреге), то он сталкивается с парадоксами. Для сетов и Фреге это - Севильский цирюльник Бертрана Рассела, который иллюстрирует ошибку; для функций и Церкви, это Остановка Оракула Алана Тьюринга.

Обратите внимание, что парадоксы - это хорошие, практичные вещи. Мы хотим, чтобы EVAL был выразимым, и мы хотим, чтобы лямбда-выражения означали больше, чем просто функции. То, что предположение об обратном приводит к противоречию, является желательным результатом; это служит хорошим тестом здравомыслия: лямбды едва ли могут быть конечными, если они выражают только простые функции.


Racket (ранее PLT Scheme) продолжает отстаивать идею о том, что практические языки программирования действительно могут быть построены с нуля на «просто лямбде».

Ядро Шатта утверждает, что лямбда не является абсолютной абстракцией. Он утверждает, что существует еще одна концепция, более примитивная (для греческого, получившая название vau), которая была известна Сусману как FEXPR.

Felleisin и компания (для Racket) получают значительную часть возможностей Shutt's vau, используя концепцию фаз или метауровней, что приблизительно означает выполнение исходного кода через несколько этапов перевода (как с предварительной обработкой C, но с использованием одного и того же языка на каждом «шаг» и «шаги» на самом деле не совсем различны во времени). (Таким образом, они утверждают, что лямбда в более высокой фазе достаточно хорошо приближается к vau.) Фактически они утверждают, что фазы лучше, чем FEXPR, именно потому, что они более ограничены; короче говоря, «FEXPR слишком сильны» (см. работу Wand, против которой выступает Шатт).

3-Lisp Брайана Смита, «Процессуальное отражение в языках программирования», пытается строго переформулировать теорию LISP-подобных языков в духе резкого отличия обозначений (символов / языка / программ) от обозначений (вещей / ссылок / ценностей / результатов). ). http://dspace.mit.edu/handle/1721.1/15961

«Теория FEXPRs тривиальна» Митчелла Ванда посылает больше гвоздей в (временный?) Гроб, который Кент Питтман использовал для FEXPR (который, как и Феллайзен, утверждает, что FEXPR слишком усложняет компиляцию).

В «На Лиспе» Пол Грэм с силой и убедительностью утверждает, что настоящая сила - это лямбда-выражения как преобразователи синтаксиса (макросы), а не как преобразователи значений (математические функции). Развитие Плоткина аппликативного лямбда-исчисления можно было бы считать несколько контрастирующим, потому что Плоткин ограничивает исчисление Черча своим подмножеством «вызов по значению / аппликативу». Конечно, эффективная обработка аппликативной части очень важна, поэтому важно разработать теорию, специализирующуюся на использовании лямбды. (Плоткин и Грэм не спорят друг с другом.)

На самом деле, в целом, понятие «лямбда как предельный» является лишь одним из таких поворотов в вечных дебатах между эффективностью и выразительностью; именно по этой позиции лямбда - это основной инструмент для выразительности, и, при условии достаточного изучения, в конечном итоге он также окажется основным инструментом для повышения эффективности. Другими словами, мы можем, если хотим, видеть будущее языков программирования не более и не менее, чем изучение того, как эффективно реализовать все практически релевантные фрагменты лямбда-исчисления.

«Следующие 700 языков программирования» Ландена, http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf , - это доступный справочник, который способствует развитию той концепции, что Lambda является Ultimate.


Вау. Стоящий аплодисменты достойный ответ. Так много указателей для подражания.
hmijail

13

Я предполагаю, что это просто ссылка на некоторые статьи, написанные Суссманом и Стилом между 1975 и 1980 годами:

  • Лямбда: высший императив
  • Лямбда: предельная декларативная
  • Лямбда: окончательное GOTO
  • LAMBDA: окончательный код операции

Смотрите статью в Википедии.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.