Вопрос

В чтении на Ограничение-логическое программирование, Я не могу не заметить очевидные отношения с программированием SQL. Это SQL пример «ограничения логического программирования» в действии?

Это было полезно?

Решение

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

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

Например. Если бы я хотел вернуть все даже номера от 1 до 10 миллионов, используя SQL, мне понадобится таблица со всеми числами, указанными для выбора из (существующего набора данных). Использование CLP, мне просто нужна связанная (10 м), но не пришлось бы явить создавать все записи.

Внутренне CLP-двигатели (проблемы с CSP) также могут выводить ограничения, чтобы сделать их быстрее. SQL Вы должны были бы выяснить эти правила и явно указать их. Например, если ваш SQL находится где a = b и b = c, механизм CLP может выяснить, что A = C и использует, что для работы быстрее, где SQL не будет. Они могут также вывести домены доменов, чтобы оптимизировать время выполнения (если я знаю, что даже номера никогда не возвращаются, CLP выброс их от рассмотрения - SQL все равно будет рассмотреть их, но не возвращаться как «решение»).

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

Другие советы

У меня нет полного ответа, но вам может быть интересно посмотреть на DataLog и DLV. Возможно, они являются «отсутствующей ссылкой» между логическим программированием (но не CLP) и SQL, которые помогут вам понять вещи более четко.

Поскольку это больше о LP, чем CLP, я, возможно, что-то пропустил - если так, извините.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top