在阅读约束逻辑编程时,我不禁注意到与 SQL 编程的明显关系。SQL 是“约束逻辑编程”的一个例子吗?
2 回答
从高层次上看,它们非常相似。两者都是声明性的或基于集合的,而不是迭代的(这意味着您要求您想要什么 - 您不会逐个循环和处理单个项目)。
CLP 可以在 SQL 中建模,但它是为问题找到更好解决方案的案例。SQL 非常适合在已经明确定义的给定数据集中寻找答案。CLP 非常适合在松散或有时甚至没有完全定义的领域中寻找答案。
举个例子。如果我想使用 SQL 返回 1 到 1000 万之间的所有偶数,我需要一个表,其中列出了所有数字以供选择(现有数据集)。使用 CLP 我只需要一个边界(10M),但不必显式创建所有记录。
内部 CLP 引擎(CSP 问题)也可以推断约束以使其更快。SQL 您必须弄清楚这些规则并明确说明它们。例如,如果您的 SQL 在 A=B 和 B=C 的情况下,CLP 引擎可能会找出 A=C 并使用它在 SQL 无法运行的地方更快地运行。他们也可以类似地推断域以优化运行时间(如果我知道偶数永远不会返回,CLP 会将它们排除在考虑之外 - SQL 仍会考虑它们但不会作为“解决方案”返回)。
希望这会有所帮助 - 如果您需要,我可以获得更多技术信息。要记住的关键点是两者相似,但您使用的取决于问题模型。如果您可以说“这些是我的变量,这些是相互关联的方式,请给我任何有效的解决方案”,那么 CLP 是一个不错的选择。如果您可以说“有我的变量,这些是细节,给我一个适合的现有数据的子集”,那么 SQL 是一个更好的候选者。
我没有完整的答案,但您可能会发现查看 Datalog 和 DLV 很有趣。它们可能是逻辑编程(但不是 CLP)和 SQL 之间的“缺失环节”,可以帮助您更清楚地理解事物。
由于这更多地是关于 LP 而不是 CLP,我可能错过了一些东西——如果是这样,对不起。