fd/distinct
要素がではなく有限領域にある場合に使用する利点は何distincto
ですか?
以下はすべて戻り([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