Qual è il vantaggio dell'utilizzo di fd/distinct
nei casi in cui gli elementi si troveranno in un dominio limitato anziché distincto
?distincto vs. fd/distinct in core.logic
Quanto segue restituisce ([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]))))
In particolare, anche se sembra si può utilizzare distincto
in qualsiasi luogo in cui è possibile utilizzare fd/distinct
(ma non viceversa), lo stesso non può dirsi per membero
e fd/in
.