我正在使用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),但前者并没有给我我想要的结果.任何人都可以解释为什么这两种方法产生不同的结果,以及我如何让前者像后者一样行事?