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

时间:2009-11-29 22:30:53

标签: java prolog embedded-language logic-programming constraint-programming

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

我在Prolog上搜索了嵌入式Java实现,并找到了它们中的一些,每个都只有很少的文档。我的(适度)选择标准是:

  • 应该可以嵌入Java中(例如,可以与我的java包捆绑在一起,而不需要在外部程序上进行任何本机安装)。
  • 从Java使用的简单界面(用于启动扣减,检查结果和添加规则)
  • 至少有一些关于如何使用它的例子
  • 不一定是Prolog,但具有上述标准的其他逻辑/约束编程语言也适合我的需要。

我有什么选择?它们的优点和缺点是什么?

13 个答案:

答案 0 :(得分:22)

根据Wikipedia,以下版本的Prolog具有Java接口。我已经链接到他们的主页:

祝你好运!

答案 1 :(得分:8)

SWI prolog一个非常流行的实现似乎有一个Java interface as does SiCStus,它比使用JNI在Java进程中实例化一个实例更容易。我很久以前就使用了C和推荐它们。我的偏好是SWI,因为它是开源的,根据我的经验,事实上的实现。

SWI Java接口的文档似乎已经足够,嵌入过程非常简单。

答案 2 :(得分:6)

我需要在2年前做同样的事情。我用了SWI interface which is called JPL。它允许您加载Prolog文件,在其上断言并查询它。它确实需要安装SWI Prolog,但这根本不是问题。 SWI Prolog是available for many platforms

我也尝试过用Java实现100%并且不需要外部程序的替代方案。所有这些都是马车或难以使用。不要浪费你的时间。

答案 3 :(得分:4)

Amzi prolog已经存在了一段时间。我简单地使用了它,但没有使用嵌入式版本。但他们确实有很好的文档和支持可以购买。他们有Java端口,所以值得一看。

答案 4 :(得分:3)

LPA确实提供LPA Intelligence Server作为将Prolog引擎嵌入各种主流语言(包括Java,.Net等)的方式

克里夫

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

答案 5 :(得分:3)

您还可以查看我创建的the Prol engine。它允许您将Prolog嵌入到Java程序中(但速度不是很快)

答案 6 :(得分:3)

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

答案 7 :(得分:3)

Clojure是一种基于JVM的类似Lisp的语言,其库(core.logic)支持基于逻辑和约束的编程。 Clojure还有大量用于生成java类和working with java code的工具,因此两种语言之间的互操作是微不足道的。

答案 8 :(得分:2)

Prova 3.0 http://www.prova.ws即将完成。然而,它不仅仅是另一种Prolog,而是混合编程风格,特别适用于简单的双向Java集成,反应式代理编程,与ESB的集成,工作流逻辑和事件处理。这个版本是从零完全重写的,因此缺少一些旧功能,如OWL集成,但必须在下一版本中返回。

答案 9 :(得分:2)

Mini-Kanren for Scala,它为您提供了一个基于Jorn子句的精简,可破解,现代的逻辑编程语言的本机JVM实现。

答案 10 :(得分:2)

我最近遇到的另一个有价值的选择是JSetL。这不是Prolog,但是 Java的约束编程库,支持逻辑变量, 统一,约束解决和非决定论。

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

答案 11 :(得分:2)

Java中有许多Prolog实现。它们不是非常快,但在Java中使用方便。 例如:  TuPrologPrologCafe 您还可以查看以下关于该主题的学士论文 Execution and Analysis of Prolog Programs in Java

答案 12 :(得分:2)

教授。 Paul Tarau从his page几个实现中提供了

Jinni Prolog

Kernel Prolog