dynamic - 谓词 `contracting/1` 是否恢复已删除的不一致值?

标签 dynamic prolog clpfd

这个问题是另一个问题的后续I posted earlier关于 Prolog 中的自定义标签。

contracting/1 谓词在对自定义标签谓词中的变量赋值后使用时,是否会从域中永久删除“不一致”的值?还是在回溯时恢复这些值?

最佳答案

这些值当然会在回溯时恢复

Prolog 谓词的性质,例如 CLP(FD) 约束,它们声明的所有内容在回溯时完全撤消。没有这个,许多重要的声明属性将不成立。参见 获取更多信息。

您可以很容易地看到这也适用于 clpfd:contracting/1,例如使用示例 session :

?- X in 0..5, X mod Y #= 2, Y in 0..2.
X in 0..5,
X mod Y#=2,
Y in 1..2.

?- X in 0..5, X mod Y #= 2, Y in 0..2, clpfd:contracting([X,Y]).
false.

?- X in 0..5, X mod Y #= 2, Y in 0..2, ( clpfd:contracting([X,Y]) ; true ).
X in 0..5,
X mod Y#=2,
Y in 1..2.

关于dynamic - 谓词 `contracting/1` 是否恢复已删除的不一致值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36272417/

相关文章:

prolog - 请解释这个用 Prolog 编写的图灵机模拟器

javascript - 尝试在 Javascript 中根据用户输入嵌套动态生成的 JSON

java - Java 中的动态和静态绑定(bind)

prolog - 在Prolog中切换语句

binding - Prolog中变量的几种绑定(bind)选项

prolog - 如何使用具有CLP(FD)和多个约束的DCG枚举组合

java - 统一 - 无限的结果

debugging - 如何调试clpfd程序?

android - 我将如何获得基于 Web 服务输入的动态 Activity ?

javascript - QML - 事件发生时动态创建计时器