5
在元素位于有限域而不是distincto
的情况下使用fd/distinct
的优点是什么?distincto vs. fd/distinct in core.logic
以下全部返回([0 1] [1 0])
。
;;; With distincto
(run* [q]
(fresh [x y]
(fd/in x y (fd/interval 1))
(distincto [x y])
(== q [x y])))
;;; With fd/distinct
(run* [q]
(fresh [x y]
(fd/in x y (fd/interval 1))
(fd/distinct [x y])
(== q [x y])))
;;; Without fd at all.
(let [interval [0 1]]
(run* [q]
(fresh [x y]
(membero x interval)
(membero y interval)
(distincto [x y])
(== q [x y]))))
值得注意的是,虽然看起来你可以使用distincto
的任何地方,你可以(但周围没有其他方式)使用fd/distinct
,同样不能说是为membero
和fd/in
。