【发布时间】:2016-06-04 19:05:58
【问题描述】:
ECLiPSe CLP 语言中的主动约束和被动约束有什么区别?以及如何/何时可以使用其中一种?
【问题讨论】:
标签: constraints constraint-programming eclipse-clp
ECLiPSe CLP 语言中的主动约束和被动约束有什么区别?以及如何/何时可以使用其中一种?
【问题讨论】:
标签: constraints constraint-programming eclipse-clp
区别是指在执行期间使用约束的方式。主动约束(可能)直接影响其中存在的变量,而被动约束不会。考虑一个关于这两种结构的小例子:
% Active
f(a,X) = f(Y,b)
% Passive
2*X < 3*Y+2
在第一个示例中,当 X 或 Y 被实例化时,“约束”可以触发并立即评估(如果有效,则统一)双方 = 主动行为。
另一方面,在第二个示例中,双方相互依赖,因此无论是先实例化 X 还是 Y 都无关紧要,必须延迟评估,直到双方的变量都实例化 = 被动行为。
(请注意,我尝试在不使用任何约束/特定于语言的语法的情况下进行回答,因为主动/被动约束的概念通常可以应用于所有基于约束逻辑的系统。另请注意,像 ECLiPSe 这样的一些语言提供全局约束推理在有限的整数域上,实际上可能使某些行为主动/被动地满足我们的需求。但是,超出了这个问题的范围,没有进一步的行为被认为是为了让事情变得简单。)
希望这会有所帮助!
【讨论】:
ic 库时,此约束将处于活动状态是否也正确:2*X #< 3*Y+2? (注意添加的#)。那么当任何一方的域更新时,另一方的域也可以更新。