【问题标题】:What are the various Datalog implementations available in Java?Java 中有哪些可用的各种 Datalog 实现?
【发布时间】:2014-06-10 08:56:51
【问题描述】:

我正在寻找不评估不必要规则的 Datalog 的 Jave 实现。我查看了IRIS reasoner,这似乎是最稳定的一个。

但是,它会评估所有规则,而不仅仅是正在使用的规则。 举个例子:

parent('homer', 'bart').
parent('abe', 'homer').
ancestor(?a, ?b) :- parent(?a, ?b).
ancestor(?a, ?b) :- ancestor(?a, ?c), ancestor(?c, ?b).

// query.. find all parent-child pairs.
?-parent(?x, ?y).

我发现 IRIS 会计算关系 ancestor,即使它从未使用过。

还有哪些其他可用于 Java 的实现?是否有任何执行此优化?

【问题讨论】:

    标签: java datalog


    【解决方案1】:

    引用 OP 链接到的 IRIS 网站:

    支持以下程序优化: - 规则过滤(删除无助于回答问题的规则 询问) - 魔术套路和横向信息传递策略 (SIPS)

    【讨论】:

    • 我无法让他们工作。没有可用的源代码示例。
    【解决方案2】:

    在 IRIS 中有一个选项,

    From here

    import org.deri.iris.optimisations.rulefilter.RuleFilter;
    import org.deri.iris.Configuration;
    
    Configuration config = new Configuration();
    config.programOptmimisers.add(new RuleFilter());
    

    但是,我无法让它工作。我在使用的底层JGraphT 库中得到一个“循环异常”。

    最后,我编写了自己的规则过滤器。这并不难。 我们需要确保只包含在导致最终关系的规则尾部引用的规则。

    【讨论】:

      猜你喜欢
      • 2016-01-20
      • 2011-03-28
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      相关资源
      最近更新 更多