graph - 约束 core.logic 查询的结果?
问题描述
我正在尝试使用 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]))))
解决方案
假设您不关心您得到的两个结果中的哪一个,那么最简单的做法是将 (run* [q] 调用替换为 (run 1 [q],其中 1 表示您只希望返回一个结果。
推荐阅读
- c++ - 为什么 dbghelp.h 的符号相关函数总是返回 126 错误代码?
- c - 通过 UNIX 域套接字接收未知数量的文件描述符
- java - 如何在 Flink 中对 Kafka Consumer 使用非键控状态?
- javascript - 在双方或仅在服务器端验证表单?
- linux - 删除第一行并用给定数据替换第一列数据
- python - Groupby.median:搜索每一行的增量(熊猫)
- c# - Xamarin - Sqlite.net 内存消耗非常高
- terraform - 如何对 Terraform 文件进行 lint
- uwp - 调整 UWP ContentDialog 宽度/高度
- python - Python 不正确的 for 循环缩进(Coursera Python 数据结构课程)