请分享您的观点,参加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
参考:https://clojure.atlassian.net/browse/LOGIC-188(由enragedginger报告)
...