使用Prolog的子集很容易识别Datalog,它不使用函数符号,而只使用常量和变量。但是,不使用否定的纯Datalog还有一个进一步的约束(*):
我们是否可以得出这样的结论:单边统一足以回答分层的Datalog查询?或者,在single 8.3.19中是否有一些例子,其中(=>)/2用于单面
取消,那是纯粹的数据,但不运行与单边统一?
(*)
您一直想知道的关于Datalog的信息
塞里等人阿尔。-1989年
发布于 2021-02-23 08:59:01
答案是否定的。对于最简单的Datalog事实和查询,直接翻译到simgle边非化已经不起作用:
p(a).
?- p(X).
X = a如果我们将Prolog事实P作为P :- true,则通过(=>)/2将该事实重写为P => true。这个东西不再起作用了,用SWI 8.3.19演示:
p(a) => true.
?- p(X).
ERROR: No rule matches p(_2556)甚至皮卡特也被这个问题所困扰,一开始就对事实进行了特殊处理。最近发布的Picat v3甚至重新引入了霍恩条款。
https://stackoverflow.com/questions/66322680
复制相似问题