我正在查看 Java 编写的 Prolog 系统 Prova。 https://prova.ws/
但是不清楚它的实现,是Prolog编译器还是Prolog解释器?我阅读了手册,但没有找到答案。
我正在查看 Java 编写的 Prolog 系统 Prova。 https://prova.ws/
但是不清楚它的实现,是Prolog编译器还是Prolog解释器?我阅读了手册,但没有找到答案。
有传言称 Prova 是基于 Mandarax 的。最新版本似乎正朝着与 SWI-Prolog 7 相同的方向发展,即它支持字典和点符号。另请参阅此处:
http://prova.ws/confluence/display/REWRITEDEV/Prova+maps+for+defining+slotted+terms
最初的 Mandarax 似乎是一个解释器,在 Prova 的用户手册中我们发现有一句话自我声明为 Prolog 解释器,但没有提示编译。
但是似乎有一个更新版本的 Mandarax (1.1.0) 是某种编译器,但也许 Prova 在编译器到来之前就已经分支出来了,它仍然是一个解释器。
因此,尽管它自己声明为 Prolog 解释器,但它很可能不是 ISO Prolog 系统,因为例如缺少 op/3。我猜它使用带有一些硬连线运算符的标记器和带有一些硬连线运算符表达式的解析器。(*)
它可能仍然提供一些好东西,但从文档和二进制大小来看,它们可能并不多。这可能通过点符号直接嵌入 Java 调用的能力得到补偿:
http://prova.ws/confluence/display/REWRITEDEV/Calling+Java+from+Prova+rulebases
再见
(*) Prova 语法走得更远,它要求最终用户编写 fail() 而不是 fail。在新的 SWI-Prolog 7 中也发现了一种语法变体,尽管对最终用户的影响不如他/她不再被允许使用原子作为目标。