Database 数据日志中的最大最小值和平均值

Database 数据日志中的最大最小值和平均值,database,recursion,logic,logic-programming,datalog,Database,Recursion,Logic,Logic Programming,Datalog,我无法理解如何使用Datalog声明性逻辑编程语言计算平均值、最大值和最小值 考虑到这个简单的模式 Flows(Stream, River) Rivers(River, Length) 如果我愿意 a) 河流的平均长度 b) 最长的河流 c) 还有那条溪流较少的河流 什么是正确的数据日志查询 我已经阅读了数据日志理论,但无法理解如何用数据日志解决这些用另一种语言编写的简单查询,也没有找到任何类似的示例 注 我使用的数据日志具有基本的算术功能,如y是z+1,y是z-1,y是z\1或y是z*1,可

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

考虑到这个简单的模式

Flows(Stream, River)
Rivers(River, Length)
如果我愿意

a) 河流的平均长度

b) 最长的河流

c) 还有那条溪流较少的河流

什么是正确的数据日志查询

我已经阅读了数据日志理论,但无法理解如何用数据日志解决这些用另一种语言编写的简单查询,也没有找到任何类似的示例



我使用的数据日志具有基本的算术功能,如
y是z+1
y是z-1
y是z\1
y是z*1
,可以使用
XX
语句和否定,因此理论上应该可以以某种方式进行此类询问,因为它具有足够的表达能力

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

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

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

“平均值”将更难实现,因为它需要“求和”和“计数”聚合。

我使用的数据日志带有基本的算术函数,如
y是z+1
y是z*1
等等,您可以使用
XX
语句,因此,理论上应该能够以某种方式进行此类询问,因为它具有足够的表达能力。相信我,如果没有聚合扩展,在标准数据日志中是不可能的。数据日志不是图灵完整的。另请参阅Wikipedia中的数据日志条目。正如我所说,它不是标准的数据日志,并且支持这些操作