Представляет ли Pattern Calculus шаг вперед в языках или мы просто возвращаемся к LISP?

11

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

Это новый рубеж в области компьютерных наук для компьютерных языков - или мы просто возвращаемся к LISP?

Hawkeye
источник
13
Возвращение в Лисп было бы шагом вперед.
Шейн
4
Это не четко определенный вопрос: это должно быть сделано сообществом вики.
Чарльз Стюарт
Согласитесь @Shane, но думайте, что для этого нужны типы и набор современных библиотек
hawkeye

Ответы:

6

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

Дэйв Кларк
источник
6

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

Например, предположим, что вы хотите определить размер структуры данных Lisp. Это 1 для атома, и n для списка из n атомов, и, в более общем случае, размер (x) + размер (y) для (cons x y).

Теперь добавьте типы в смесь. Размер списка будет его длина. Каков размер списка списков атомов? Если вы рассматриваете эту структуру данных как список (элементами которого являются списки атомов), ответом будет длина списка. Если вы рассматриваете эту структуру данных как содержащую атомы, которые, как оказалось, хранятся в списке списков, ответом является сумма длин списков элементов.

Типы позволяют различать эти два представления (формы) необработанных данных. Вам нужна система типов, которая позволяет различать (List) (List Atom) и (List List) (Atom). Наиболее распространенная реализация этого различия - с классами типов (как в Haskell).

Жиль "ТАК - перестань быть злым"
источник