Яке походження та значення фрази "Лямбда остаточна?"


43

Я кілька років возився з функціональними мовами програмування, і я постійно стикаюся з цією фразою. Наприклад, це розділ "Маленький схемер", який, безумовно, передує блогу під цим ім'ям. (Ні, глава не допомагає відповісти на моє запитання.)

Я розумію, що означає лямбда, ідея анонімної функції є одночасно простою і потужною, але я не розумію, що означає "кінцеве" в цьому контексті.

Місця, де я бачив цю фразу:

  1. Заголовок глави 8 Маленького Схемера
  2. Блог: http://lambda-the-ultimate.org/
  3. Серія робіт "Лямбда остаточний Х": http://library.readscheme.org/page1.html

Я відчуваю, що мені тут не вистачає посилання, чи може хтось допомогти?


1
Схоже, це назва популярного блогу, але якщо є ще одне історичне джерело, мені цікаво ...
Клайм,

1
Чи можете ви надати кілька посилань на місця, де ви бачили цю фразу? Цей контекст був би дуже корисним у пошуку відповіді.
Адам Кросленд

@Adam - додав кілька посилань.
Ерік Вілсон

Посилання з серії посилань переспрямовуються на cultureua.com Чи може хтось надати оновлене посилання?
tejasbubane

Відповіді:


47

Так, це просто повторювана фраза в заголовку декількох статей, починаючи з пари в 70-х, в якій Суссман і Стіл демонструють використання лямбда-числення для програмування за допомогою мінімалістичного діалекту Ліспа під назвою " Схема ", яку вони розробили для ціль. Ви можете знайти самі папери тут ; вони цікаві та напрочуд актуальні.

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

Повторна фраза призводить до очевидної узагальненої форми "для всіх X, лямбда - це кінцева X", що означає, що я, як правило, вважаю "Lambda the Ultimate" як назву блогу, зазначаючи, що LtU стосується мови програмування дизайн та теорія. За іронією долі, LtU, ймовірно, також був би одним з найкращих місць, щоб знайти когось, хто міг би розповісти вам про щось, для чого лямбда не є кінцевою реалізацією. :]

Зауважимо також, що Суссман є одним із авторів SICP , дуже впливового підручника, який також використовує мову схеми і витрачає досить багато часу, впроваджуючи лямбда-абстракції як концепцію.


2
+1 для розміщення цих класичних паперів. Гай Л. Стіл-молодший також написав книгу про загальний LISP . LISP і схема не були кінцем шляху для Гая, який продовжував сприяти J , Fortress та іншим мовам. Хлопець також був причетний до словника жаргону та словника хакера .
Джон Тоблер

@John Tobler: Зовсім так! Я зосередив увагу лише на Суссмані, тому що він, здається, брав більше участі у Схемі, яка глибоко пов'язана з документами Ламбда. Не означало створювати враження, що Стіл нічого іншого не робив, адже це насправді далеко не так. :]
CA McCann

28

Lambda The Ultimate посилається на ідею, що лямбди лямбда-числення можуть ефективно реалізувати кожну вбудовану концепцію в кожній мові програмування, минулому, теперішньому та майбутньому. Класи, модулі, пакети, об'єкти, методи, потік управління, структури даних, макроси, продовження, розробки, генератори, списки, потоки тощо.

Як це буває, до цієї кінцевої природи належить стояння за анонімною функцією. Але лямбда по своїй суті не обмежуються лише анонімними функціями. Вони вчаться таким чином, але суть лямбда йде набагато глибше, ніж математичні функції без імен. Іншими словами, я приймаю питання з:

Я розумію, що означає лямбда, ідея анонімної функції є одночасно простою і потужною, але я не розумію, що означає "кінцеве" в цьому контексті.

Як практичне питання, використання лямбда в якості синтаксичних абстракцій ("макросів"), які не є за значенням / застосовними (які є математичні функції), є абсолютно важливим для розуміння того, що лямбди справді можуть служити Ядро кожної системи обробки мови програмування.

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

Зауважте, що парадокси - це хороші, практичні речі. Ми хочемо, щоб EVAL був виразним, і ми хочемо, щоб лямбди означали більше, ніж просто функції. Це припущення про протилежне - бажаний результат; це служить приємним випробуванням на здоровий стан: лямбди навряд чи можуть бути кінцевими, якщо вони виражають лише прості функції.


Ракетка (раніше PLT Scheme) продовжує переслідувати думку про те, що практичні мови програмування справді можна будувати з нуля на "просто лямбда".

Кернель , за Шуттом, стверджує, що лямбда - це насправді не кінцева абстракція. Він стверджує, що існує ще одна примітивна концепція (для грецької мови, яка називається vau), яка була відома Суссману як FEXPR.

Felleisin та компанія (для Ракетки) отримують велику потужність ватта Shutt, використовуючи концепцію фаз , або метарівнів, що приблизно означає виконання вихідного коду через кілька етапів перекладу (як при попередній обробці C, але використовуючи одну й ту ж мову на кожному "крок" і "кроки" насправді не є цілком різними в часі). (Отже, вони стверджують, що лямбда у вищій фазі наближається до вау.) Насправді вони стверджують, що фази кращі, ніж FEXPR, саме тому, що вони є більш обмеженими; коротше кажучи, "FEXPR є надто потужними" (див. роботу Ванда, проти якої заперечує Шатт).

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 , є доступною посиланням, що сприяє розвитку цієї концепції про те, що Ламбда є остаточним.


Ого. Постійна овація - гідна відповідь. Стільки покажчиків слід слідувати.
hmijail

13

Я думаю, що це просто посилання на деякі статті, написані Суссманом і Стіле в 1975-1980 роках, що називаються:

  • Лямбда: Остаточний імператив
  • Лямбда: Кінцева декларація
  • Лямбда: Остаточний ГОТО
  • ЛАМБДА: Остаточний опкод

Дивіться статтю у Вікіпедії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.