Какая связь между CLP и SQL? - PullRequest
4 голосов
/ 03 марта 2010

Читая о программировании логики ограничений , я не могу не заметить очевидную связь с программированием SQL. Является ли SQL примером "программирования логики ограничений" в действии?

Ответы [ 2 ]

5 голосов
/ 03 марта 2010

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

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

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

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

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

0 голосов
/ 03 марта 2010

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

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

...