2024年Clojure调查!(链接:问卷)中分享您的想法!

欢迎!请参阅关于页面获取有关如何使用此工具的更多信息。

0
core.logic

我试图跟随(链接:这篇博文)提供的示例(链接:https://mattsenior.com/2014/02/using-clojures-core-logic-to-solve-simple-number-puzzles),并发现只有在我删除了测试减法得到负结果的条件后它才能正常工作。我移除了很多不同的东西,发现即使是最基本的示例也无法找到任何匹配项。

`
(ns example.core
(:refer-clojure :exclude (link: ==))
(:require (link: clojure.core.logic :refer :all))
(:require (link: clojure.core.logic.fd :as fd)))

(run* (link: q)
(fresh (link: a0 a1)

(== q (link: a0 a1))
(fd/in a0 a1 (fd/interval 1 9))
(fd/- a0 a1 -1)
;(fd/eq
;  (= (- a0 a1) -1))
))

`

依赖项(尽管我也尝试了clojure 1.8和1.9版本)
`
:dependencies (link: [org.clojure/clojure "1.7.0")

             (link: org.clojure/core.logic "0.8.11")]

`

3 答案

0

评论由:enragedginger

我对这个问题进行了更多缩小。这段代码在core.logic "0.8.7"和"0.8.8"版本中运行正常,但在"0.8.9"及更高版本中已破裂。

0

评论由:joinr

直到commit 36d4e03055c57094e09aa81e2bc37883de1dfbde,这个功能运作如预期

`
(defn test []
(run* [q]

(fresh [x y z]
  (fd/in x y z  (fd/interval 1 9))
  (fd/eq (= (- (* x y) z) -1))
  (== q [x y z]))))

`

看起来(链接:https://github.com/clojure/core.logic/commit/719c23f80280762ff20216a579d88efa32da2de7
引入了一个回归(尽管它可能解决了一些其他问题)。

建议将上述内容添加为一个简单的回归测试(在重新审视LOGIC-161修复的原因之后)。目前我在fd代码中感到迷茫,除了看到回归测试引入的域区间创建变动外。我尝试了多种方式处理负值,但始终没有得到结果。

0
by
参考: https://clojure.atlassian.net/browse/LOGIC-188 (由enragedginger报告)
...