Каковы наилучшие применения логического программирования?
По логическому программированию я имею в виду подпарадигму декларативных языков программирования. Не путайте этот вопрос с "Какие проблемы вы можете решить с помощью if-then-else?"
Язык, такой как Prolog, очень увлекателен, и он стоит учиться ради обучения, но мне нужно задаться вопросом, какой класс реальных проблем лучше всего выражать и решать на таком языке. Есть ли лучшие языки? Существует ли логическое программирование под другим именем на более модных языках программирования? Является ли циничная версия ответа вариантом Python Paradox?
Ответы
Ответ 1
Прототипирования.
Пролог динамичен и существует уже 50 лет. Компилятор либерален, синтаксис минималистичен, а "делать вещи" легко, весело и эффективно. SWI-Prolog имеет встроенный трассировщик (отладчик!) И даже графический трассировщик. Вы можете изменить код на лету, используя make/0
, вы можете динамически загружать модули, добавлять несколько строк кода, не выходя из интерпретатора, или редактировать файл, который вы сейчас используете, на лету с помощью edit(1)
. Как вы думаете, вы обнаружили проблему с предикатом foobar/2
?
?- edit(foobar).
И как только вы выйдете из редактора, эта вещь будет перекомпилирована. Конечно, Eclipse делает то же самое для Java, но Java не является языком прототипирования.
Помимо чистого прототипирования, Prolog невероятно хорошо подходит для перевода части логики в код. Таким образом, автоматические проверки и тому подобные вещи могут быть легко написаны на Прологе.
Первый интерпретатор Erlang был написан на Прологе - и по какой-то причине, поскольку Пролог очень хорошо подходит для синтаксического анализа и кодирования логики, которую вы найдете в деревьях разбора. На самом деле, Пролог поставляется со встроенным парсером! Нет, не библиотека, это в синтаксисе, а именно DCG.
Пролог часто используется в НЛП, особенно в синтаксисе и вычислительной семантике.
Но Пролог недооценивается и недооценивается. К сожалению, это похоже на академическое или "непригодное для любых реальных целей" клеймо. Но его можно очень хорошо использовать во многих реальных приложениях, связанных с фактами и вычислением отношений между фактами. Он не очень хорошо подходит для сокращения чисел, но CS - это не только сокращение чисел.
Ответ 2
Так как Prolog = Синтаксическое объединение + Обратная цепочка + REPL,
большинство мест, где используется синтаксическая унификация, также полезно использовать для Prolog.
Синтаксическая унификация использует
- Преобразования AST
- Тип вывода
- Срок перезаписи
- Теорема, доказывающая
- Обработка естественного языка
- Соответствие шаблону
- Генерация комбинаторных тестовых сценариев
- Извлечь субструктуры из структурированных данных, таких как XML-документ
- Символическое вычисление, то есть исчисление
- Дедуктивные базы данных
- Экспертные системы
- Искусственный интеллект
- Синтаксический
- Языки запросов
Ответ 3
Программирование логики Constraint (CLP)
Многие очень хорошие и хорошо подходящие варианты использования логического программирования уже упомянуты. Я хотел бы дополнить существующий список несколькими задачами из чрезвычайно важной области применения логического программирования:
Логическое программирование смешивается плавно, плавно, чем другие парадигмы, с ограничениями, что приводит к созданию структуры под названием Программирование логики Constraint.
Это приводит к использованию специализированных решателей ограничений для разных доменов, таких как:
- CLP (FD) для целых
- CLP (B) для Booleans
- CLP (Q) для рациональных номеров
- CLP (R) для чисел с плавающей запятой.
Эти специализированные решатели ограничений приводят к нескольким важным вариантам использования логического программирования, которые не были упомянуты, некоторые из которых я покажу ниже.
При выборе системы Prolog мощность и производительность решателей ограничений часто входят в число решающих факторов, особенно для коммерческих пользователей.
CLP (FD) — Рассуждение над целыми числами
На практике CLP (FD) является одним из наиболее важных приложений логического программирования и используется для решения задач из следующих областей, среди прочего:
- планирования
- выделение ресурсов
- планирование
- комбинаторная оптимизация
См. clpfd для получения дополнительной информации и нескольких примеров.
CLP (B) — Булевы ограничения
CLP (B) часто используется в связи с:
- Решение SAT
- проверка цепи
- комбинаторный подсчет
См. clpb.
CLP (Q) — Рациональные числа
CLP (Q) используется для решения важных классов задач, возникающих в Operations Research:
- линейное программирование
- целочисленное линейное программирование
- смешанное целочисленное линейное программирование
См. clpq.
Ответ 4
Prolog идеально подходит для нечисловых задач. Эта статья дает несколько примеров некоторых приложений Prolog, и это может помочь вам понять, какие проблемы могут решить.
Ответ 5
Одна из вещей, которую Prolog дает вам бесплатно, - это алгоритм поиска обратного отслеживания - вы можете реализовать его самостоятельно, но если ваша проблема лучше всего решена с помощью этого алгоритма, тогда приятно использовать его.
Две вещи, которые я видел, это хорошие математические доказательства и понимание естественного языка.
Ответ 6
Prolog отлично подходит для решения головоломок и тому подобного. Тем не менее, в области решения головоломок это облегчает и облегчает решение головоломок проще и сложнее решать головоломки. Тем не менее, написание решателей для головоломок сетки и тому подобное, таких как Hexiom, Sudoku или Nurikabe, не особенно тяжело.
Ответ 7
Один простой ответ - "системы сборки". Язык, используемый для создания Makefile (по крайней мере, часть для описания зависимостей), по существу, является языком логического программирования, хотя и не является "чистым" логическим языком программирования.