0

我不知道如何使用 Datalog 声明性逻辑编程语言计算平均值、最大值和最小值。

例如。考虑到这个简单的模式

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

如果我想要

a) 河流的平均长度,

b) 最长的河流,

c) 河流较少的河流

什么是正确的 Datalog 查询?

我已阅读 Datalog 理论,但无法弄清楚如何使用 Datalog 解决这些简单的另一种语言查询,并且没有找到任何类似的示例。

注意
我使用的数据记录具有基本的算术功能,例如、y is z+1或,您可以使用or语句和否定,因此理论上应该可以以某种方式进行这种询问,因为它具有足够的表达能力。y is z-1y is z\1y is z*1X<YY>X

4

2 回答 2

1

是否支持否定?如果是这样,我们可以按如下方式执行 max(或 min):

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

"mean" 将更难做,因为它需要 "SUM" 和 "COUNT" 聚合。

于 2017-02-21T06:03:46.410 回答
0

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

于 2017-02-07T10:37:38.260 回答