Каковы наилучшие варианты использования логического программирования? - PullRequest
22 голосов
/ 19 октября 2008

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

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

Ответы [ 7 ]

17 голосов
/ 19 октября 2008

Прототипы .

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

?- edit(foobar).

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

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

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

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

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

11 голосов
/ 04 апреля 2012

С Прологом = Синтаксическое Объединение + Обратная цепочка + REPL ,

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

Синтаксическое объединение использует

  • преобразования AST
  • Тип Вывод
  • Срок переписывания
  • доказательство теоремы
  • Обработка естественного языка
  • Сопоставление с образцом
  • Генерация комбинаторного теста
  • Извлечение подструктур из структурированных данных, таких как документ XML
  • Символьное вычисление, то есть исчисление
  • Дедуктивные базы данных
  • Экспертные системы
  • Искусственный интеллект
  • Синтаксический
  • Языки запросов
7 голосов
/ 17 октября 2016

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

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

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

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

  • CLP (FD) для целых чисел
  • CLP (B) для Booleans
  • CLP (Q) для рациональных чисел
  • CLP (R) для с плавающей запятой чисел.

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

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

CLP (FD) & mdash; Рассуждая над целыми числами

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

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

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

CLP (B) & mdash; Булевы ограничения

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

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

См. .

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

CLP (Q) используется для решения важных классов проблем, возникающих в Operations Research :

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

См. .

5 голосов
/ 21 октября 2008

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

4 голосов
/ 21 октября 2008

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

4 голосов
/ 19 октября 2008

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

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

2 голосов
/ 12 ноября 2008

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

...