Чи є обчислення шаблону кроком вперед у мовах чи ми просто повертаємось до LISP?


11

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

Це нова межа в галузі комп’ютерних наук для комп'ютерних мов - чи ми просто повертаємось до LISP?


13
Повернення до Лісп було б кроком вперед.
Шейн

4
Це не чітко визначене питання: його слід зробити вікі спільноти.
Чарльз Стюарт

Погодьтеся @Shane, але думаю, що йому потрібні типи та набір сучасних бібліотек
hawkeye

Відповіді:


6

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


6

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

Наприклад, припустимо, ви хочете визначити розмір структури даних Lisp. Це 1 для атома, і n для списку з n атомів, і загалом розмір (x) + розмір (y) для (cons x y).

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

Типи дозволяють розрізняти ці два представлення (форми) вихідних даних. Вам потрібна система типів, яка дозволяє розрізняти (Список) (Список Atom) та (Список Список) (Atom). Найпоширеніша реалізація цього розрізнення відбувається з класами типів (як у Haskell).

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