Чи однакове числення лямбда та комбінаторної логіки?


26

Я зараз читаю " Лямбда-обчислення та комбінатори " Гіндлі та Селдіна. Я не експерт, але завжди цікавився обчисленням лямбда через залучення до функціонального програмування (починаючи з Lisp та SICP, а тепер з R та Haskell).

У « Binary лямбда - обчислення і комбінаторної логіки» , Джон Тромп говорить:

CL може розглядатися як підмножина лямбда-числення ... теорії значною мірою однакові і стають рівнозначними за наявності правила експансіональності.

За яких умов можна використовувати комбінаторну логіку замість обчислення лямбда ?

Будь-які посилання будуть вдячні.


Погляньте на "Обчислення лямбда: його синтаксис та семантика" від HP Barendregt.
Kaveh

Відповіді:


15

Що відрізняє комбінаторну логіку, це те, що вона є змінною безкоштовно. Це іноді корисно в метаматематиці та філософській логіці, де статус змінних складний.

Це також може бути корисним у реалізації, оскільки управління змінними може бути головним болем. Ср., Наприклад, Hughes, 1982, Суперкомбінатори: новий метод реалізації мов застосунку


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

Див., Наприклад, S. Peyton Jones, 1992, "Впровадження ледачих функціональних мов на фондовому обладнанні: безшпинкова беззмістова машина G" - research.microsoft.com/copyright/accept.asp?path=/users/simonpj/…
Blaisorblade

2
@Blaisorblade: Комбінатори та варіанти використовувались для впровадження скорочення графіків для ледачих мов - Будьте уважні: Haskell і ghc - це не одне і те ж, а література містить кілька Haskells на основі суперкомбінатора. Але це правда, сучасне функціональне програмування знайшло переваги ефективності роботи з середовищами, які переважають над його складністю. Ви все ще бачите суперкомбінатори, які використовуються, наприклад, у логічному програмуванні вищого порядку, де це неправда. Суперкомбінатори залишаються частиною інвентаря методик, що застосовуються при впровадженні програмування вищого порядку.
Чарльз Стюарт

Суперкомбінатори уникають лише вільних змінних, не пов'язаних з ними, тому IMHO вони не можуть вважатися використанням комбінаційної логіки як такої. В основному це спеціальні лямбда-терміни. Існують набагато менші відмінності між суперкомбінаторами, піднятими лямбда-програмами (якщо такі є, не впевнені) та реалізацією GHC (де вказівники від закриття до її вільних змінних можуть бути скопійовані з функції хоста, завдяки чистоті). Сказавши це, я також думав про недавнього компілятора Utrecht Haskell, який дуже схожий на GHC, але IIRC використовує лямбда-ліфтинг; все-таки це не CL.
Blaisorblade

Я не знав логічного програмування вищого порядку - я знайшов цей документ на ньому: springerlink.com/content/t68777w270713p5n . На жаль, навряд чи я встигну її прочитати.
Blaisorblade

4

Реферування на коментар Джона Тромп, я хочу зауважити , що комбінаторна логіка відчуває себе дуже відрізняється від лямбда - обчислення. Оскільки ваш інтерес випливає з функціонального програмування, ви насправді не хочете так багато знати про комбінаційну логіку.

Мій улюблений навчальний посібник з комбінаторної логіки - у цих конспектах лекцій Кембриджського університету.

Однак вони введені для пояснення реалізації так званих ледачих (або прикладних) мов; як було сказано в моєму попередньому коментарі, такі методи зараз застаріли.


Оскільки комбінаційні мови більше не використовуються для впровадження лінивих / прикладних мов, які сучасні методики зараз є? І чи є назва / категорія для класифікації цих методів?
CMCDragonkai

@CMCDragonkai Див. Коментарі до cstheory.stackexchange.com/a/306/989 для обговорення. Коротка практична відповідь - "дивіться документи про те, що робить GHC": існує безліч різних методик (включаючи як STG-машини, так і оптимізації, такі як аналіз суворості), які поєднуються разом, щоб зробити ліниві програми швидкими.
Blaisorblade
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.