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