Максимальный минимум и среднее значение в журнале данных

Я не могу понять, как рассчитать среднее, максимальное и минимальное значение с помощью языка программирования декларативной логики 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, а также отрицание, поэтому теоретически должен быть возможен какой-либо способ опроса такого рода, поскольку Обладает достаточной выразительной силой.


person AndreaF    schedule 07.02.2017    source источник


Ответы (2)


Поддерживается отрицание или нет? Если это так, мы можем сделать 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».

person Xujie Si    schedule 21.02.2017

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

person Pierre Carbonnelle    schedule 07.02.2017
comment
Журнал данных, который я использую, содержит базовые арифметические функции, такие как y is z+1 или y is z*1 и т. д., и вы можете использовать операторы X<Y или Y>X, так что теоретически должен быть возможен какой-то способ такого опроса, поскольку он обладает достаточной выразительной силой. - person AndreaF; 07.02.2017
comment
Поверьте мне, это невозможно в стандартном Datalog, без расширений для агрегации. Даталог не завершен по Тьюрингу. См. также запись журнала данных в Википедии. - person Pierre Carbonnelle; 09.02.2017
comment
Как я уже сказал, это не стандартный Datalog и поддерживает эти операции - person AndreaF; 13.02.2017