我正在使用一个相当简单的待办事项数据库。它具有分层树状结构。每个实体都是一个块;每个块作为其所有子块的
children
属性,以及 checked
属性。所以一个简单的例子是:
5 :block/children 6
5 :block/children 7
6 :block/checked 1
7 :block/checked 0
...
我想查询所有已完成所有子任务的块。在上面的示例中,块 5 不符合条件,因为它有一个未经检查的子块
7
。
我写了很多变体,基本上可以归结为:
[:find ?ag
:where
[?ag :block/children ?child]
(not [?child :block/checked 0])
]
这不起作用,因为它返回所有具有 any 检查子任务的任务。 有人可以指导我如何将其表达为“对于所有孩子,确保谓词是正确的”?
谢谢!
对于这个小例子来说也许有些过分了, 但“Union-Find”可以处理这个问题以及更多。 我不使用你的应用程序,但它 这是一个 Prolog 实现。
https://www.swi-prolog.org/pack/file_details/union_find/README.md