Как лучше всего использовать логическое программирование?



под логическим программированием я подразумеваю субпарадигму декларативных языков программирования. Не путайте этот вопрос с вопросом "какие проблемы вы можете решить с помощью if-then-else?"



Такой язык, как пролог, очень увлекателен, и его стоит изучать ради изучения, но я должен задаться вопросом, какой класс реальных проблем лучше всего выражается и решается таким языком. Есть ли лучшие языки? Существует ли логическое программирование под другим именем в более модном программировании языки? Является ли циничная версия ответа вариантом парадокса питона ?
664   7  

7 ответов:

прототипирование .

Пролог динамичен, и так было в течение 50 лет. Компилятор либеральен, синтаксис минималистичен, и "делать вещи" легко, весело и эффективно. SWI-Prolog имеет встроенный Трейсер (отладчик!) , и дажеграфический трассировщик . Вы можете изменять код на лету, используя make/0, Вы можете динамически загружать модули, добавлять несколько строк кода, не выходя из интерпретатора, или редактировать файл, который вы в данный момент запускаете на лету с помощью edit(1). Вы думаете, что вы нашли проблему с предикатом foobar/2?

?- edit(foobar).
И как только вы покинете редактор, эта вещь будет повторно скомпилирована. Конечно, Eclipse делает то же самое для Java, но Java-это не совсем язык прототипов.

Помимо чистого прототипирования, Пролог невероятно хорошо подходит дляперевода части логики в код . Итак, автоматические пословицы и тому подобное можно легко написать в прологе.

Первый интерпретатор Erlang был написано в прологе - и не просто так, поскольку Пролог очень хорошо подходит для синтаксического анализа, а кодирование логики вы найдете в деревьях синтаксического анализа. На самом деле, Prolog поставляется со встроенным синтаксическим анализатором! Нет, не библиотека, это в синтаксисе, а именно DCGs.

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

, но, Пролог используется недостаточно, и недооцененные. К сожалению, она кажется академической или "непригодной для каких-либо реальных целей"." стигма. Но он может быть очень хорошо использован во многих реальных приложениях, связанных с фактами и вычислением отношений между фактами. Он не очень хорошо подходит для хруста чисел, но CS-это не только хруст чисел.

Так как пролог = синтаксическая унификация + Обратная цепочка + REPL ,

Большинство мест, где используется синтаксическая унификация, также хорошо подходит для Пролога.

Синтаксическая унификация использует

  • преобразования AST
  • Вывод Типа
  • переписывание терминов
  • доказательство теоремы
  • обработка естественного языка
  • соответствие шаблону
  • генерация комбинаторного тестового случая
  • извлечение подструктур из структурированных данных, таких как XML-документ
  • символическое вычисление, то есть исчисление
  • дедуктивные базы данных
  • экспертные системы
  • Искусственный Интеллект
  • разбор
  • языки запросов

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

Пролог отлично подходит для решения головоломок и тому подобного. Тем не менее, в области решения головоломок это делает легкое/среднее решение головоломок проще, а сложное-сложнее. Тем не менее, написание решателей для сеточных головоломок и тому подобного, таких как Hexiom, Sudoku или Nurikabe, не особенно сложно.

Программирование логики ограничений (CLP)

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

Логическое программирование плавно, более плавно, чем другие парадигмы, сочетается сограничениями , что приводит к структуре, называемойограничением логического программирования .

Это приводит к выделенным решатели ограничений для различных областей , таких как:

  • CLP(FD) для целых чисел
  • CLP (B) для булевых
  • CLP (Q) для рациональных чисел
  • CLP(R) для чисел с плавающей точкой.
Эти специальные решатели ограничений приводят к нескольким важным случаям использования логического программирования, которые еще не были упомянуты, некоторые из которых я покажу ниже.

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

CLP (FD) - рассуждение над целыми числами

На практике CLP (FD) является одним из наиболее важных приложений логического программирования и используется для решения задач из следующих областей, в частности:

  • планирование
  • распределение ресурсов
  • планирование
  • комбинаторная оптимизация

См. clpfd для получения дополнительной информации и нескольких примеров.

CLP (B) - булевы ограничения

CLP (B) часто используется в связи с:

  • SAT решение
  • проверка схемы
  • комбинаторный подсчет

См. clpb .

CLP (Q) - Рациональные числа

Используется CLP (Q) для решения важных классов задач, возникающих при исследовании операций :

  • линейное программирование
  • целочисленное линейное программирование
  • смешанное целочисленное линейное программирование

См. clpq.

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

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

Один простой ответ - "строить системы". Язык, используемый для построения файлов Makefile (по крайней мере, часть для описания зависимостей), по существу является языком логического программирования, хотя на самом деле не является "чистым" языком логического программирования.

Comments

    Ничего не найдено.