Java嵌入式Prolog解释器/编译器

45

我正在用Java编写一个应用程序,需要完成一些复杂的逻辑规则推理作为其功能的一部分。我希望使用Prolog或其他逻辑/约束编程语言来编写我的逻辑推理,而不是Java,因为我相信结果代码将更简单且更易于维护。

我在Google上搜索了一些嵌入式Java实现的Prolog,并找到了一些,但都很少有文档说明。我的(谨慎)选择标准如下:

  • 可嵌入Java(例如可以与我的Java包捆绑在一起,而不需要在外部程序上安装任何本地程序)
  • 具有简单的接口,可从Java中使用(用于启动推断、检查结果和添加规则)
  • 至少附带有几个如何使用它的示例
  • 不一定非得是Prolog,但其他具备上述标准的逻辑/约束编程语言也可以满足我的需求。

我有哪些选择?它们各自的优缺点是什么?


1
我从未使用过Java中的Prolog,但另一个选项是编写自己的代码。我知道至少有两本Lisp书籍可以在不太多的页面上实现这个功能(《On Lisp》和《PAIP》),因此即使在Java中也不会太难。 - Ken
4
可以用几页代码制作一个玩具逻辑编程语言,但我希望找到更加健壮的解决方案。尽管也可以用几页代码制作一个玩具Lisp,但我认为四页代码应该就可以满足我的需求了 :-) - Sami
你说的话有些过于苛刻了!我不确定什么样的小型Prolog实现才算是“玩具”,或者它们在哪些方面不够“健壮”。Norvig的其中一个教训是“Prolog在主要观点上与Lisp相似”;因此,一个基于Lisp的微型Prolog并不是一个“玩具”,而是你编译器的另一种UI。虽然在Java中可能没有那么有趣,但我认为他并没有使用那么多宏。 - Ken
  1. 没有库。
  2. 没有语法。
虽然在Lisp中,您可以重用Lisp语法和Lisp库(“Prolog在主要方面类似于Lisp”),但Java不是这样。相反,您最终还需要实现解析器和库。此外,即使使用Lisp实现,也由于没有使用Prolog语法和库而无法使用任何外部可用的Prolog库。
- Sami
1
当然,你可以声称你可以以类似于使用匿名对象而不是闭包的方式重用Java语法和库。但是,任何有函数式编程经验并尝试过这种方法的人都知道,语法的增加复杂性和冗长只会使这个过程变得非常痛苦。 - Sami
你尝试过Drools吗?它是一个完整的Java生产系统(rete),易于部署。http://www.jboss.org/drools - ProfVersaggi
13个回答

23

TuProlog似乎是这些中唯一不需要先安装任何外部应用程序的。我会研究一下。谢谢。 - Sami
我非常喜欢TuProlog。文档可能不是很好,但实现相当不错,正如你所说,它不需要混合使用其他东西。 - JUST MY correct OPINION
2
维基百科列出了更多带有Java接口的Prolog系统:JIProlog、Jekejeke Prolog、JLog、jTrolog、XSB Prolog、YAP Prolog。 - user502187
TuProlog非常棒,可以嵌入,并且非常灵活。我已经将它移植到了Android平台。 - ProfVersaggi

9

SWI Prolog是一种非常流行的实现,似乎有一个Java接口,SiCStus也有,使用它比在Java进程中使用JNI更容易。我以前用过C语言编写这两个接口,确实推荐使用它们。我的首选是SWI,因为它是开源的,并且从我的经验来看是事实上的实现。

SWI的Java接口文档似乎足够详细,嵌入过程也很简单。


1
SWI Prolog和SiCStus需要本地安装才能从Java中使用。 - Sami
2
我相信你可以将可执行文件或DLL程序打包好,然后将它们包含在JAR文件中。SWI最初是作为Unix应用程序启动的,因此我认为它不会执行真正的安装程序所需的操作--即,进行注册表更改或安装组件对象。 - Hassan Syed

7
我两年前也需要做同样的事情。我使用了名为JPL的SWI界面。它允许您加载Prolog文件,在其上进行断言和查询。它确实需要安装SWI Prolog,但这不是问题。SWI Prolog适用于许多平台
我还尝试过完全使用Java实现且不需要外部程序的替代方案。它们全部都存在漏洞或难以使用。不要浪费时间。

5

Clojure是一种基于JVM的Lisp-like语言,并附带一个支持逻辑和基于约束的编程的库(core.logic)。此外,Clojure还具有许多用于生成Java类和与Java代码交互的工具,因此两种语言之间的交互非常简单。


4

Amzi Prolog已经存在一段时间了。我曾经简要地使用过它,但没有使用嵌入式版本。然而,他们有良好的文档,并且可以购买支持。他们也有Java版本,所以值得一看。


3

您还可以查看我创建的Prol引擎。它允许您将Prolog嵌入到Java程序中(但不是特别快)。


3

2
LPA提供LPA Intelligence Server作为一种将其Prolog引擎嵌入各种主流语言中,包括Java、.Net等的方法。

http://www.lpa.co.uk/int.htm


2

有两个用Java编写的商业Prolog:IF Computer Japan的Minerva和Jekejeke。两者都非常接近ISO标准。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接