2024 Clojure 状态调查!分享您的想法。

欢迎!请参阅关于页面以获取更多有关如何操作的信息。

0
core.logic

我正在尝试跟随 (link: 这篇博客帖子)(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 评论

截至提交 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]))))

`

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

建议在回溯LOGIC-161错误修复的理由后,将上述内容添加为一个简单的回归测试(我目前迷失在fd代码中,除了看到回归测试中创建域/区间时的改动外)。我尝试了几次对负值进行处理,但始终无法得到结果。

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