Что является более интересным или мощным: карри, ртуть или лямбда-пролог? - PullRequest
19 голосов
/ 01 июня 2010

Я хотел бы спросить вас о том, какую формальную систему было бы интереснее внедрить с нуля / реверс-инженера.

Я просмотрел некоторые существующие и открытые проекты систем логического / декларативного программирования. Я решил придумать что-то подобное в свободное время или хотя бы уловить общую идею реализации.

Было бы замечательно, если бы некоторые из этих систем обеспечивали большую часть выразительной мощи и краткости современных научных исследований в области логики и ее связи с вычислительными моделями.

Что бы вы посоветовали изучить хотя бы на концептуальном уровне? Например, лямбда-пролог интересен, в частности, тем, что он допускает отношения более высокого порядка, но AFAIK основан на интуиционистской логике и поэтому не имеет принципа исключенного среднего; это вообще недостаток для меня.

Я также приветствовал бы любые предложения о современных системах логического программирования, которые менее популярны, но более выразительны / мощны.

Ответы [ 4 ]

16 голосов
/ 02 июня 2010

Пролог был первым языком, который изменил мою точку зрения на программирование. Но позже я обнаружил, что он не настолько высок, как хотелось бы видеть.

Карри - я пробовал только Munster CC, и нашел его несколько неудобным. На самом деле, в этот момент я решил перестать игнорировать Хаскелл.

У Меркурия есть много вещей, которые я хотел увидеть в Прологе. У меня действительно хорошие ожидания по поводу возможности различать режимы правил. Программы, написанные на Mercury, должны вдохновлять компилятор на большую оптимизацию (наверное).

9 голосов
/ 30 июля 2010

Twelf .

Он значительно обобщает лямбда-пролог и представляет собой логическую структуру и металогическую структуру, а также язык логического программирования. Если вам нужен язык с упором на логику и вычисления, это лучшее, что я знаю.

4 голосов
/ 19 июля 2010

Если бы я попытался расширить систему на основе логики, я бы выбрал Prolog Cafe , поскольку он небольшой, с открытым исходным кодом, соответствует стандартам и может быть легко интегрирован в системы на основе Java.

2 голосов
/ 04 июня 2010

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

Это было очень поучительное упражнение. Первые 12 строк кода (and и or) буквально заняли около 6 часов, чтобы написать и исправить. Это была в значительной степени логика поиска, написанная очень лаконично с использованием продолжений. Остальные последовали немного легче. Затем, как только я добавил алгоритм объединения, все это просто заработало.

...