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

我通过将约束集合设定为集合(setify),改变了具象化器,所以现在只有一个结果。因此,我的说明已经过时,但问题仍然存在。过滤掉无关约束是一个独立的问题,我同意应该这么做(我正在尝试对名义约束做这件事)。

0
...