Предположим, я определил несколько значений для функции:
+(value[1] == "cats")
+(value[2] == "mice")
Можно ли определить функцию, подобную следующей?
(undefined[X] == False) <= (value[X] == Y)
(undefined[X] == True) <= (value[X] does not exist)
Я предполагаю, что это невозможно по двум причинам:
(1) Запросы гарантированно завершатся в журнале данных, и вы можете запросить undefined[X] == True
.
(2) Согласно Википедии, одним из отличий Datalog от Prolog является то, что Datalog «требует, чтобы каждая переменная, появляющаяся в отрицательном литерале в теле предложения, также появлялась в каком-то положительном литерале в теле предложения».
Но я не уверен, потому что используемые термины («завершить», «буквальный», «отрицательный») имеют очень много применений. (Например: означает ли negative literal
f[X] == not Y
или not (f[X] == Y)
? Означает ли termination
, что он может вычислить одно выражение, такое как undefined[3] == True
, или означает ли это, что он нашел бы все X, для которых undefined[X] == True
?)
value[X] does not exist
, который является псевдокодом. - person Jeffrey Benjamin Brown   schedule 06.04.2018