2017-02-07 12 views
0

Я не могу понять, как рассчитывать среднее, максимальное и минимальное значение с помощью языка декларативного логического языка Datalog.Максимальный минимум и среднее значение в Datalog

Например. Учитывая эту простую схему

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

Если я хочу

а) средняя длина рек,

б) самая длинная река,

с) и река с меньшим количеством потоков

Каковы правильные запросы Datalog?

Я прочитал теорию Datalog, но не могу понять, как эти простые запросы на другом языке могут быть решены с помощью Datalog и не найдены ни одного подобного образца.

Примечание
регистрации данных, которые я использую с основными арифметическими функциями, как y is z+1, y is z-1, y is z\1 или y is z*1, и вы можете использовать X<Y или Y>X заявления, и отрицание, так что теоретически должно быть возможно сделать этот вид допроса в так как он обладает достаточной выразительной силой.

ответ

0

Стандартный Datalog поддерживает только логику первого порядка, которая не включает в себя функции агрегата. Однако некоторые реализации datalog, такие как pyDatalog, поддерживают агрегированные функции как расширение.

+0

Datalog, который я использую, имеет основные арифметические функции, такие как 'y is z + 1' или' y is 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