在阅读有关constraint-logic programming的文章时,我不禁注意到与SQL编程之间的明显关系。SQL是运行中的“约束逻辑编程”的一个例子吗?
发布于 2010-03-03 22:26:11
从高层次上看,它们非常相似。两者都是声明性的或基于集合的,而不是迭代的(这意味着你需要你想要的东西-你不会逐个循环和处理单独的项目)。
CLP可以用SQL建模,但它是一个寻找更好的问题解决方案的案例。SQL很适合在已经显式定义的给定数据集中查找答案。CLP很适合在定义松散甚至有时甚至没有完全定义的域中查找答案。
作为一个例子。如果我想使用SQL返回1到1000万之间的所有偶数,我需要一个表,其中列出了所有可供选择的数字(一个现有的数据集)。使用CLP,我只需要一个界限(10M),而不必显式创建所有记录。
在内部,CLP引擎(CSP问题)还可以推断约束以使其更快。你必须弄清楚这些规则,并明确地声明它们。例如,如果您的SQL是A=B和B=C,则CLP引擎可能会找出该A=C,并在SQL不能的地方使用它来更快地运行。它们还可以类似地推断域以优化运行时(如果我知道偶数从未返回,CLP将把它们从考虑范围中剔除- SQL仍然会考虑它们,但不会作为“解决方案”返回)。
希望这对你有所帮助--如果你需要的话,我可以提供更多的技术支持。要记住的关键点是,这两者是相似的,但您使用哪一个取决于问题模型。如果你能说“这些是我的变量,这些是如何相互关联的,请给我任何有效的解决方案”,那么中电是一个很好的候选者。如果你可以说“这是我的变量,这些是细节,给我一个适合的现有数据的子集”,那么SQL是一个更好的选择。
发布于 2010-03-03 21:43:34
我没有完整的答案,但您可能会发现看看Datalog和DLV会很有趣。它们可能是逻辑编程(但不是CLP)和SQL之间的“缺失的一环”,这将帮助您更清楚地理解事物。
由于这更多的是关于LP而不是中电,我可能遗漏了一些东西-如果是这样的话,对不起。
https://stackoverflow.com/questions/2371625
复制相似问题