这个问题是在另一个问题之后提出的我之前发过帖子 https://stackoverflow.com/q/36260440/2936460关于 Prolog 中的自定义标签。
是否contracting/1
谓词,当在自定义标签谓词中对变量进行赋值之后使用时,从域中永久删除“不一致”的值?或者回溯时这些值会恢复吗?
这些值当然是restored关于回溯。
它的本质是pureProlog 谓词,例如 CLP(FD) 约束,它们声明的所有内容都完全undone关于回溯。如果没有这一点,许多重要的声明性属性将不成立。看逻辑纯粹性 /questions/tagged/logical-purity了解更多信息。
你可以很容易地看出这也适用于clpfd:contracting/1
,例如使用示例会话:
?- 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.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)