Datomic/Datascript/Datalog:如何检查谓词对所有边都有效?

问题描述 投票:0回答:1

我正在使用一个相当简单的待办事项数据库。它具有分层树状结构。每个实体都是一个块;每个块作为其所有子块的

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 检查子任务的任务。 有人可以指导我如何将其表达为“对于所有孩子,确保谓词是正确的”?

谢谢!

prolog datomic datalog datascript
1个回答
0
投票

对于这个小例子来说也许有些过分了, 但“Union-Find”可以处理这个问题以及更多。 我不使用你的应用程序,但它 这是一个 Prolog 实现。

https://www.swi-prolog.org/pack/file_details/union_find/README.md

© www.soinside.com 2019 - 2024. All rights reserved.