请在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

到提交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报告)
...