Datalog

时间:2017-02-07 10:08:36

标签: database recursion logic logic-programming datalog

我无法计算如何使用Datalog声明性逻辑编程语言计算平均值,最大值和最小值。

EG。考虑这个简单的架构

Flows(Stream, River)
Rivers(River, Length)

如果我想要

a)河流的平均长度,

b)最长的河流,

c)和少量溪流的河流

什么是正确的Datalog查询?

我已经阅读过Datalog理论,但是无法想象如何使用Datalog解决其他语言查询中的这些简单问题,并且没有找到任何类似的样本。

请注意
我使用的数据记录具有基本算术函数,如y is z+1y is z-1y is z\1y is z*1,您可以使用X<YY>X陈述和否定,因此理论上应该可以以某种方式进行这种审讯,因为它具有足够的表达能力。

2 个答案:

答案 0 :(得分:1)

是否支持否定?如果是这样,我们可以按如下方式进行最大(或最小):

shorterRivers(R1, L1) :- Rivers(R1, L1), Rivers(R2, L2), L1 < L2.
longestRivers(R1, L1) :- Rivers(R1, L1), !shorterRivers(R1,L1).

&#34;平均&#34;将会更难做,因为它需要&#34; SUM&#34;和&#34; COUNT&#34;聚合

答案 1 :(得分:0)

标准数据记录仅支持一阶逻辑,不包括聚合函数。但是,某些数据记录实现(如pyDatalog)支持聚合函数作为扩展。