Что интереснее или мощнее: карри, ртуть или лямбда-пролог?
Я хотел бы спросить вас о том, какую формальную систему было бы более интересно реализовать с нуля / реверс-инженера.
Я просмотрел некоторые существующие и открытые проекты систем логического / декларативного программирования. Я решил придумать что-то подобное в свободное время или хотя бы уловить общую идею реализации.
Было бы замечательно, если бы некоторые из этих систем обеспечивали большую часть выразительной мощи и краткости современных научных исследований в области логики и ее связи с вычислительными моделями.
Что бы вы посоветовали изучить хотя бы на концептуальном уровне? Например, лямбда-пролог интересен, в частности, тем, что он допускает отношения более высокого порядка, но AFAIK основан на интуиционистской логике и поэтому не имеет принципа исключенного среднего; это вообще недостаток для меня.
Я также приветствовал бы любые предложения о современных системах логического программирования, которые являются менее популярными, но более выразительными / мощными.
4 ответа
Пролог был первым языком, который изменил мою точку зрения на программирование. Но позже я обнаружил, что это не так высоко, как хотелось бы видеть.
Карри - я пробовал только Munster CC, и мне это показалось несколько неудобным. На самом деле, в этот момент я решил перестать игнорировать Хаскелл.
У Меркурия есть много вещей, которые я хотел увидеть в Прологе. У меня действительно хорошие ожидания по поводу возможности различать режимы правил. Программы, написанные на Mercury, должны вдохновлять компилятор на большую оптимизацию (я думаю).
Он значительно обобщает лямбда-пролог и представляет собой логическую структуру и металогическую структуру, а также язык логического программирования. Если вам нужен язык с упором на логику и вычисления, это лучшее, что я знаю.
Если бы я попытался расширить систему, основанную на логике, я бы выбрал Prolog Cafe, поскольку он небольшой, с открытым исходным кодом, соответствует стандартам и может быть легко интегрирован в системы на основе Java.
Для окончательного проекта по курсу языков программирования, который я взял, нам пришлось встроить в Схему оценщик Prolog, используя продолжения и макросы. Конечным результатом было то, что вы могли свободно смешивать код Scheme и Prolog и даже передавать произвольные предикаты, написанные на Scheme, в движок Prolog.
Это было очень поучительное упражнение. Первые 12 строк кода (and
а также or
) буквально заняло около 6 часов, чтобы написать и получить правильные. Это была в значительной степени логика поиска, написанная очень лаконично с использованием продолжений. Остальные последовали немного легче. Затем, как только я добавил алгоритм объединения, все это просто заработало.