Jaka jest zaleta korzystania z fd/distinct
w przypadkach, gdy elementy będą w skończonej domenie zamiast distincto
?distincto vs. fd/distinct in core.logic
Następujący all return ([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]))))
Warto zauważyć, że chociaż wydaje się, można użyć distincto
w każdym miejscu, gdzie można skorzystać fd/distinct
(ale nie na odwrót), tym samym nie można powiedzieć o membero
i fd/in
.