【问题标题】:Answer Set Programming - How to count number of facts appears to be my query result?答案集编程 - 如何计算似乎是我的查询结果的事实数量?
【发布时间】:2014-11-29 15:38:21
【问题描述】:

所以我有一组事实和一个用 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. 

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

【问题讨论】:

    标签: count fact datalog answer-set-programming


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多