所以我有一组事实和一个用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,也没有安装它,所以这个答案可能是错误的。请自行测试。