用于Java的embedded式Prolog解释器/编译器

我正在开发一个Java应用程序,它需要做一些复杂的逻辑规则推理作为其function的一部分。 我想在Prolog或其他一些逻辑/约束编程语言中编写我的逻辑推理,而不是Java,因为我相信所得到的代码会更简单,更易于维护。

我在Prolog上searchembedded式Java实现,发现它们的数量很less,每个文档都很less。 我(适度)的select标准是:

  • 应该可以embedded到Java中(例如,可以与我的Java软件包捆绑在一起,而不需要在外部程序上进行本地安装)
  • 从Java使用简单的接口(用于启动扣除,检查结果和添加规则)
  • 至less有几个关于如何使用它的例子
  • 不一定必须是Prolog,但是具有上述标准的其他逻辑/约束编程语言也适合我的需求。

我有什么select,他们的优点和缺点是什么?

根据维基百科 ,以下版本的Prolog具有Java接口。 我已经链接到他们的主要页面:

  • BProlog
  • Ciao Prolog
  • SICStus Prolog
  • SWI Prolog
  • TuProlog (用Java实现)
  • LPA Prolog

祝你好运!

SWI prolog一个非常stream行的实现似乎有一个Java接口,就像SiCStus一样 ,比使用JNI在Java进程中实例化一个实例更容易。 我已经使用了两个来自C不久前,并推荐他们。 我的偏好是SWI,因为它是开源的,从我的经验来看, 事实上的实现。

SWI的Java接口的文档似乎是足够的,embedded过程非常简单。

两年前我也需要这样做。 我使用了被称为JPL的SWI接口 。 它可以让你加载一个Prolog文件,对其进行断言和查询。 它确实需要安装SWI Prolog,但这完全没有问题。 SWI Prolog 可用于许多平台 。

我也尝试了在Java中100%实现的替代scheme,并且不需要外部程序。 他们都是越野车或难以使用。 不要浪费你的时间。

Amzi prolog已经有一段时间了。 我已经使用了它,但不是embedded式版本。 但是他们确实有很好的文档和支持可以买到。 他们有Java端口,所以它可能值得一看。

LPA确实提供了LPA Intelligence Server作为将Prolog引擎embedded到各种主stream语言(包括Java,.Net等)中的一种方式

克莱夫

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

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

Clojure是一个基于JVM的类Lisp语言,具有支持逻辑和约束编程的库( core.logic )。 Clojure还有大量用于生成java类和使用java代码的工具 ,所以这两种语言之间的内部操作是微不足道的。

你也可以看看我创build的Prol引擎 。 它允许你将Prologembedded你的Java程序(但不是很快)

Prova 3.0 http://www.prova.ws即将完成。; 然而,这不仅仅是另一个Prolog,而是一种编程风格的混合体,特别是对于简单的双向Java集成,反应代理编程,与ESB集成,工作stream逻辑和事件处理都非常有用。 这个版本是从零开始的一个完整的重写,所以一些旧的特性,比如OWL集成,都缺less了,但是在下一个版本中肯定会返回。

有Scala的Mini-Kanren ,它为您提供了一个原生JVM实现的精简,可触发的,现代的基于Horn-clause的逻辑编程语言。

我最近遇到的另一个值得select的是JSetL。 它不是Prolog,而是Java的约束编程库,支持逻辑variables,统一,约束求解和非确定性。

http://prmat.math.unipr.it/~gianfr/JSetL/index.html

Java中有许多Prolog实现。 它们不是非常快,但从Java内部使用起来很方便。 例如: TuProlog或PrologCafe你也可以看一下以下关于Java中Prolog程序的执行和分析的学士论文。

Paul Tarau教授从他的页面中提供了几个实现

Jinni Prolog

内核序言

    Interesting Posts