Лямбда 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.