Lợi thế của việc sử dụng fd/distinct
trong trường hợp các phần tử sẽ nằm trong một miền hữu hạn thay vì distincto
là gì?distincto so với fd/khác biệt trong core.logic
Sau đây tất cả trở về ([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]))))
Đáng chú ý, mặc dù nó xuất hiện bạn có thể sử dụng trong bất kỳ distincto
nơi mà bạn có thể sử dụng fd/distinct
(nhưng không phải là cách khác xung quanh), cùng không thể nói cho membero
và fd/in
.