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

用于Java的嵌入式Prolog解释器/编译器,java,prolog,embedded-language,logic-programming,constraint-programming,Java,Prolog,Embedded Language,Logic Programming,Constraint Programming,我正在用Java开发一个应用程序,它需要做一些复杂的逻辑规则推导,作为其功能的一部分。我想用Prolog或其他一些逻辑/约束编程语言(而不是Java)来编写我的逻辑演绎,因为我相信生成的代码将非常简单,并且更易于维护 我在谷歌上搜索了Prolog上的嵌入式Java实现,找到了很多,每个都只有很少的文档。我的(适度)选择标准是: 应可嵌入Java(例如,可与我的Java包捆绑在一起,而无需在外部程序上进行任何本机安装) 从Java使用的简单接口(用于启动推断、检查结果和添加规则) 至少举几个例子

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

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

  • 应可嵌入Java(例如,可与我的Java包捆绑在一起,而无需在外部程序上进行任何本机安装)
  • 从Java使用的简单接口(用于启动推断、检查结果和添加规则)
  • 至少举几个例子说明如何使用它
  • 不一定必须是Prolog,但具有上述标准的其他逻辑/约束编程语言也适合我的需要

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

SWI prolog一个非常流行的实现似乎有一个比使用JNI在Java进程中实例化实例更简单的方法。我很早以前就用过C语言的这两种语言,并且推荐它们。我的首选是SWI,因为它是开源的,根据我的经验,它是事实上的实现

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

已经存在了一段时间。我简单地使用了它,但没有使用嵌入式版本。然而,他们有良好的文档和支持,可以买到。它们有Java端口,因此可能值得一看。

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

  • (用Java实现)

祝你搜索好运

两年前我也需要这样做。我用过。它允许您加载Prolog文件,对其进行断言和查询。它确实需要安装SWI Prolog,但这根本不是问题。SWI Prolog是


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

Prova3.0即将完成。然而,它不仅是另一个Prolog,而且是多种编程风格的混合体,特别适用于简单的双向Java集成、反应式代理编程、与ESB的集成、工作流逻辑和事件处理。这个版本是从零开始的完全重写,因此一些较旧的功能(如OWL集成)丢失了,但一定会在下一个版本中返回。

有,这为您提供了一个精简、可黑客攻击的本地JVM实现,现代的基于Horn子句的逻辑编程语言。

LPA确实提供了LPA智能服务器,作为将其Prolog引擎嵌入各种主流语言(包括Java、.Net等)的一种方式

克莱夫


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


Java中有许多Prolog实现。它们的速度不是很快,但是在Java中使用起来很方便。 例如: 或 你也可以看一下以下关于教育主题的学士论文
.

您也可以看看我创建的。它允许您将Prolog嵌入Java程序(但速度不是很快)

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

是一种基于JVM的类似Lisp的语言,它有一个库()支持基于逻辑和约束的编程。Clojure还拥有大量用于生成java类的工具,因此这两种语言之间的交互非常简单。

Paul Tarau教授提供了多个实现


我从未在Java中使用过Prolog,但另一种选择是编写自己的Prolog。我知道至少有两本Lisp书籍可以在不太多的页面(关于Lisp和PAIP)中实现这一点,所以即使在Java中也不会那么难。当然,你可以用几页代码来制作一个玩具逻辑编程语言,但我正在寻找更健壮的东西。现在,您也可以在几页代码中完成一个玩具lisp,所以我想我只需要四页,我很乐意:-)这些是您正在扔的一些加载单词!我不确定是什么让一个小的Prolog实现成为一个“玩具”,或者在什么方面它们不够“健壮”。诺维格的课程之一是“Prolog在要点上类似于Lisp”;那么,Lisp上的一个小序言就不是一个“玩具”,而是编译器的另一个UI。在Java中不会有那么多乐趣,但我认为他在宏方面做得不多。没有图书馆。2.没有语法。使用Lisp时,您可以重用Lisp语法和Lisp库(“Prolog在要点上类似于Lisp”),而Java则不然。相反,您最终还必须实现解析器和库。此外,即使在Lisp实现中,由于没有使用Prolog语法和库,您也无法使用任何外部可用的Prolog库。当然,您可以声称可以以类似于使用匿名对象而不是闭包的方式重用Java语法和库。但是,任何一个有函数式编程经验的人都知道,语法的复杂性和冗长性使得这几乎只是一个痛苦的练习。TuProlog似乎是其中唯一一个不需要先安装任何外部应用程序的。我会调查的。谢谢。我很喜欢特普洛格。文档可能没有那么热门,但是实现非常好,正如您所说的,它不需要mixin