Подтвердить что ты не робот

Что интереснее или мощнее: Curry, Mercury или Lambda-Prolog?

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Twelf.

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

Ответ 3

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

Ответ 4

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

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