我无法计算如何使用Datalog声明性逻辑编程语言计算平均值,最大值和最小值。
EG。考虑这个简单的架构
Flows(Stream, River)
Rivers(River, Length)
如果我想要
a)河流的平均长度,
b)最长的河流,c)和少量溪流的河流
什么是正确的Datalog查询?
我已经阅读过Datalog理论,但是无法想象如何使用Datalog解决其他语言查询中的这些简单问题,并且没有找到任何类似的样本。
请注意
我使用的数据记录具有基本算术函数,如y is z+1
,y is z-1
,y is z\1
或y is z*1
,您可以使用X<Y
或Y>X
陈述和否定,因此理论上应该可以以某种方式进行这种审讯,因为它具有足够的表达能力。
答案 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)支持聚合函数作为扩展。