count - 答案集编程 - 如何计算我的查询结果中出现的事实数量?

标签 count fact datalog answer-set-programming

所以我有一组事实和一个用 ASP 编写的要在 DLV 上运行的查询,

%Q1 : Find the implicit "is_a" relationship between terms
%ex: if term A is is_a term B, term B is_a term C, then term A is_a term C  
%is_a One level
    triple1(TermA, "go:is_a", TermB):- triple(TermA, "go:is_a", TermB), TermA != TermB.
%is_a MultiLevel
triple1(TermA, "go:is_a", TermC) :-
    triple(TermA, "go:is_a", TermB),
    triple(TermB, "go:is_a", TermC),
    TermA != TermC.
triple1(TermA, "go:is_a", TermC) :-
    triple1(TermA, "go:is_a", TermB),
    triple1(TermB, "go:is_a", TermC),
    TermA != TermC.

然后我想计算我的答案集中有多少个 triple1 三元组,不包含事实。然后我做了这种聚合 #count 查询:

triple1nr(X) :- #count{TermA : triple1(TermA,"go:is_a",TermC)} = X. 

但是我得到的只是结果中出现的变量TermA的数量。当我将查询更改为:

triple1nr(X) :- #count{triple1(TermA,"go:is_a",TermC)} = X. 

它给了我错误。我该怎么做这个查询?

最佳答案

根据其他求解器的知识,我猜测您的代码没有计算 TermA 和 TermC 的组合,而是忽略了 TermC 的变化。您需要告诉它计算组合。

triple1nr(X) :- #count{TermA,TermC : triple1(TermA,"go:is_a",TermC)} = X.

但是我不使用 dlv,也没有安装它,所以这个答案可能是错误的。请自行测试。

关于count - 答案集编程 - 如何计算我的查询结果中出现的事实数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27203944/

相关文章:

PHP - 计算两个日期之间的天数

data-warehouse - 事实表中是否允许使用文本字段?

database - 令人困惑的DES Datalog语法错误

mysql - 查询从一个表和一个额外的列检索信息,这是另一个表的条件

mysql - GROUP BY 一列和 COUNT 两列

python - Pandas 分组和计数

azure - Azure 流分析是否适合生成数据仓库事实表和维度表?

Ansible 日期变量

datomic - DataLog 等同于 SQL 吗?

database - 如何防止 Datalog 规则修剪空值?