在阅读constraint-logic programming时,我不禁注意到与SQL编程的明显关系。 SQL是“约束逻辑编程”的一个例子吗?
答案 0 :(得分:5)
它们从高层次上非常相似。两者都是声明性的或基于集合而不是迭代的(意味着你要求你想要的东西 - 你不会逐个循环并逐个处理单个项目。)
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是一个更好的候选者。
答案 1 :(得分:0)
我没有完整的答案,但你会发现看看Datalog和DLV很有意思。它们可能是逻辑编程(但不是CLP)与SQL之间的“缺失环节”,可以帮助您更清楚地理解事物。
由于这更多是关于LP而不是CLP,我可能错过了一些东西 - 如果是,抱歉。