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

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

  • 应该可以嵌入到 Java 中(例如可以与我的 java 包捆绑在一起,而不需要在外部程序上进行任何本机安装)
  • Java 使用的简单接口(用于启动推论、检查结果和添加规则)
  • 至少提供一些关于如何使用它的示例
  • 不一定非得是 Prolog,但符合上述标准的其他逻辑/约束编程语言也能满足我的需求。

我有哪些选择以及它们的优点和缺点是什么?

有帮助吗?

解决方案

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

祝您搜索顺利!

其他提示

SWI prolog 一个非常流行的实现似乎有一个 与 SiCStus 一样的 Java 接口 这比使用 JNI 在 Java 进程中实例化实例更容易。我很早以前就使用过 C 语言,并且推荐它们。我更喜欢 SWI,因为它是开源的,根据我的经验 事实上的 执行。

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

两年前我也需要做同样的事情。我用了 SWI 接口,称为 JPL. 。它允许您加载 Prolog 文件、对其进行断言并对其进行查询。它确实需要安装 SWI Prolog,但这根本不是问题。SWI 序言是 适用于许多平台.

我还尝试过 100% 用 Ja​​va 实现并且不需要外部程序的替代方案。它们都存在缺陷或难以使用。不要浪费你的时间。

阿姆兹序言 已经存在了一段时间了。我曾短暂使用过它,但没有使用过嵌入式版本。但是他们确实有很好的文档并且可以购买支持。他们有 Java 端口,所以可能值得一看。

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

克莱夫

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

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

克洛尤尔 是一种基于 JVM 的类似 Lisp 的语言,带有一个库 (核心逻辑)支持基于逻辑和约束的编程。Clojure 还拥有大量用于生成 java 类和 使用java代码, ,因此两种语言之间的互操作是微不足道的。

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

普罗瓦3.0 http://www.prova.ws 即将完成。然而,它不仅仅是另一个 Prolog,而是多种编程风格的混合体,尤其对于简单的双向 Java 集成、反应式代理编程、与 ESB 集成、工作流逻辑和事件处理非常有用。此版本是从零开始的完全重写,因此缺少一些较旧的功能(例如 OWL 集成),但一定会在下一个版本中返回。

Scala 的迷你 Kanren, ,它为您提供了一种精简的、可修改的、基于现代 Horn 子句的逻辑编程语言的本机 JVM 实现。

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

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

Java 中有多种 Prolog 实现。它们不是非常快,但是在 Java 中使用起来很方便。例子有: 图Prolog 或者普罗格咖啡馆您还可以查看以下主题的学士论文Java Prolog程序的执行与分析.

教授。保罗·塔劳 (Paul Tarau) 提供自 他的页面 几种实现方式

金尼序言

内核序言

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top