【问题标题】:Does the predicate `contracting/1` restore deleted inconsistent values?谓词 `contracting/1` 是否恢复已删除的不一致值?
【发布时间】:2016-07-16 07:22:15
【问题描述】:

这个问题是在另一个I posted earlier Prolog 中的自定义标签之后提出的。

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

【问题讨论】:

  • 从纯声明的角度来看,没有必要恢复不一致的值。但是contracting/1 可能会严重破坏域的表示,以至于它变得无法使用。或者域表示会导致之后的搜索成本更高。

标签: dynamic prolog clpfd


【解决方案1】:

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

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

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

?- X 在 0..5,X mod Y #= 2,Y 在 0..2。 X 在 0..5 中, X 模 Y#=2, 1..2 中的 Y。 ?- X 在 0..5,X mod Y #= 2,Y 在 0..2,clpfd:contracting([X,Y])错误。 ?- X in 0..5, X mod Y #= 2, Y in 0..2, ( clpfd:contracting([X,Y]) ; true )。 X 在 0..5 中, X 模 Y#=2, 1..2 中的 Y。

【讨论】:

    猜你喜欢
    • 2021-03-23
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 2020-07-09
    • 2013-02-26
    相关资源
    最近更新 更多