2024 Clojure 状况调查 中分享您的想法!

欢迎!请查看 关于 页面,获取更多关于如何使用本网站的信息。

0
core.logic

这里是使用 fixc 的两个示例

`
(run* [q]
(fresh [x y]

(fixc [x y]
  (fn [[x y] a _] (!= x 1))
  (fn [[x y] a] (= (walk a x) (walk a y)))
  '...)
(== x y)))

(run* [q]
(fresh [x y c d]

(fixc [x y]
  (fn [[x y] a _] (!= x y))
  (fn [[x y] a] (or (not (lvar? (walk a x))) (not (lvar? (walk a y)))))
  '...)
(== [x y] [[c] [d]])))

`

每个示例中,约束 != 被再现两次,这表明 fixc 约束确实运行了两次。

3 答案

0

评论者:dnolen

对于第一个示例,我在 master 上看到以下结果

((_0 :- (!= (_1 1))))

这是你看到的结果吗?由于 x 甚至都不是答案的一部分,我觉得我们应该显示这些约束规则?

0

评论者:namin

我通过将约束规则集合化来更改了再现器,因此你现在只会得到一个结果。所以我的说明已经过时了,但问题仍然存在。过滤出无关约束是一个单独的问题,我同意这也应该完成(我尽力对名义约束做到这一点)。

0
参考: https://clojure.atlassian.net/browse/LOGIC-117(由 namin 报告)
...