Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 具有-ve值的Core.logic有限域_Clojure_Clojure Core.logic - Fatal编程技术网

Clojure 具有-ve值的Core.logic有限域

Clojure 具有-ve值的Core.logic有限域,clojure,clojure-core.logic,Clojure,Clojure Core.logic,我不知道为什么下面的代码在使用-5作为域值之一时不返回任何结果 user=> (run* [q] (infd q (domain -5 5)) (*fd q q 25)) () user=> (run* [q] (infd q (domain 0 5)) (*fd q q 25)) (5) 注意:此代码引用core.logic 0.8.0 betas中的行为。看起来*fd约束的实现仅适用于所有正值的域。它根据乘积域的下界/上界与右手因子域的上界/下界的简单划分计算左手因子的上界和下

我不知道为什么下面的代码在使用-5作为域值之一时不返回任何结果

user=> (run* [q] (infd q (domain -5 5)) (*fd q q 25))
()
user=> (run* [q] (infd q (domain 0 5)) (*fd q q 25))
(5)

注意:此代码引用core.logic 0.8.0 betas中的行为。

看起来
*fd
约束的实现仅适用于所有正值的域。它根据乘积域的下界/上界与右手因子域的上界/下界的简单划分计算左手因子的上界和下界,反之亦然。您可以看到,将负片扔进混音中会导致此操作不起作用:

 (run* [q]
   (fresh [r]
     (infd q (domain 1 2 3 4 5))
     (infd r (domain 20 25))
     (*fd q q r)))

 Product = [20..25], RHS = [1..5] => LHS = [20/5..25/1] = [4..25]

 (run* [q]
   (fresh [r]
     (infd q (domain -1 0 1 2 3 4 5))
     (infd r (domain 20 25))
     (*fd q q r)))

 Product = [20..25], RHS = [-1..5] => LHS = [20/5..25/-1] = [4..-25]
由于标志已关闭,因此LHS的间隔不令人满意,因为下限大于上限

具有负值的有限域适用于
+fd
约束:

 (run* [q] (fresh [a b] (infd a b (domain -1 0 1)) (+fd a b 0) (== q [a b])))
 => ([-1 1] [0 0] [1 -1])

core.logic 0.8.0 Beta中目前根本不支持具有负值的域。如果它起作用,那完全是偶然的。我个人不打算在不久的将来增加对这方面的支持,尽管在0.8.0得到适当的发布后,一个全面的补丁将受到欢迎。

不,这将需要对reals、CLP(R)上的约束逻辑编程的支持。我当然有兴趣为此做出贡献,但我也不打算自己去做这件事。