2017-02-07 69 views
0

我無法確定如何使用Datalog聲明性邏輯編程語言計算平均值,最大值和最小值。Datalog中的最大最小值和平均值

例如,考慮到這個簡單的模式

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

如果我想

一)河流的平均長度,

B)最長的河流,

c)和河流較少流

什麼是正確的Datalog查詢?

我已經閱讀了Datalog理論,但無法確定這些簡單的在另一種語言查詢中如何用Datalog解決,並且沒有找到任何類似的樣本。

注意
,我使用的是一個像y is z+1y is z-1y is z\1y is z*1基本的運算功能,並且可以使用X<YY>X陳述,和否定的數據記錄,所以理論上應該可以做這樣的審訊中因爲它有足夠的表現力。

回答

0

標準Datalog僅支持一階邏輯,它不包含集合函數。但是,某些數據記錄實現(如pyDatalog)支持將聚合函數作爲擴展。

+0

我使用的數據記錄是基本的算術函數,如'y是z + 1'或'y是z * 1'等等,並且您可以使用'X X'語句,因此理論上應該可以由於它具有足夠的表達力,因此以某種方式進行這種詢問。 – AndreaF

+0

相信我,在標準Datalog中這是不可能的,沒有擴展的聚合。 Datalog不是圖靈完整的。另請參閱維基百科中的數據記錄條目。 – user474491

+0

正如我所說的不是標準Datalog並支持這些操作 – AndreaF

1

否定支持或不支持?如果是這樣,我們能做的最大(小)如下:

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

「的意思是」將做起來難,因爲它需要「SUM」和「COUNT」聚合。

+0

是支持否定 – AndreaF

相關問題