我正在尝试使用 core.logic 模拟一个图形,并希望匹配所有与两个其他节点有边连接的节点。我已经想到了以下内容,但它返回了两个结果而不是所需的一个,因为[2 3 4]和[2 4 3]是等价的。我应该如何约束查询以仅返回所需的结果?
(use ' clojure.core.logic.pldb)
(db-rel edge a b)
(def g
(db
[edge 1 2]
[edge 2 3]
[edge 3 4]
[edge 2 4]))
(with-db g
(run* [q]
(fresh [x y z]
(edge x y)
(edge x z)
(!= y z)
(== q [x y z]))))