从计算的角度来看,两种模型之间存在很大差异。Prolog 是图灵完备的,这意味着原则上任何其他语言的任何程序都可以翻译成 Prolog。
但是,Neo4j 查询语言 *Cypher 以及通常大多数数据库查询语言都不是图灵完备的,因此不适合表示任何通用程序。这有利有弊。主要缺点是您通常需要将 Neo4j 的强大功能与 Python 或任何其他语言的外部程序相结合,以生成有用的应用程序。主要优点是 Cypher 中的所有查询都在终止(尽管它们可能需要很长时间才能完成)数据库查询的一个非常好的属性;当您查询数据库时,您总是期望得到答案。
这在 Prolog 中不会发生。一个简单的程序,如
p(X):-p(X).
像 p(a) 这样的目标会导致非终止计算。这是拥有图灵完备语言的所有功能所必须付出的代价。
如果你想看看另一个相关的范式,它介于 Prolog 和 Neo4j 之间,看看演绎数据库,比如Datalog。Datalog 的语法类似于 prolog(实际上它是一个子集),但类似于数据库查询语言,Datalog 中的目标/查询总是终止的。
比如之前Datalog中的程序
p(X):-p(X).
以相同的目标 p(a),轻松生成答案的空集合 {},而不是像 Prolog 中那样无限循环。