小编Nir*_*Nir的帖子

SWI-Prolog和约束,库CLP(FD)

我正在使用clpfd库在(swi)prolog中使用约束.

我试图确定一组约束何时封装或包含另一组约束,例如X <4封装X <7,就像前者为真,后者为真.这可以使用逻辑蕴涵来轻松表示.但是,我无法让#==>运算符给我想要的结果,所以我求助于使用not(Co1#/ \#\ Co2),其中Co1和Co2是约束.这适用于个别约束,但我想将约束的连接传递给Co1和Co2.

现在这是擦.当我尝试

X#<7 #/\ #\X#<4.
Run Code Online (Sandbox Code Playgroud)

我回来了

X in 4..6,
X+1#=_G822,
X+1#=_G834,
_G822 in 5..7,
_G834 in 5..7.
Run Code Online (Sandbox Code Playgroud)

(奇怪的是,在Sicstus中执行此操作会导致分段错误)

我进去的时候

X#<7,X#<4
Run Code Online (Sandbox Code Playgroud)

我得到了理想的

X in inf..3.
Run Code Online (Sandbox Code Playgroud)

显然,我无法将后者传递给(Co1#/ \#\ Co2),但前者并没有给我我想要的结果.任何人都可以解释为什么这两种方法产生不同的结果,以及我如何让前者像后者一样行事?

constraints prolog clpfd clpq

5
推荐指数
1
解决办法
1812
查看次数

标签 统计

clpfd ×1

clpq ×1

constraints ×1

prolog ×1