Java 嵌入式 Prolog 解释器/编译器
-
08-07-2019 - |
题
我正在开发一个 Java 应用程序,它需要执行一些复杂的逻辑规则推导作为其功能的一部分。我想用 Prolog 或其他一些逻辑/约束编程语言而不是 Java 来编写我的逻辑推导,因为我相信生成的代码将更加简单且更易于维护。
我在 Prolog 上搜索了嵌入式 Java 实现,发现了很多,但每个实现的文档都很少。我的(适度的)选择标准是:
- 应该可以嵌入到 Java 中(例如可以与我的 java 包捆绑在一起,而不需要在外部程序上进行任何本机安装)
- Java 使用的简单接口(用于启动推论、检查结果和添加规则)
- 至少提供一些关于如何使用它的示例
- 不一定非得是 Prolog,但符合上述标准的其他逻辑/约束编程语言也能满足我的需求。
我有哪些选择以及它们的优点和缺点是什么?
其他提示
SWI prolog 一个非常流行的实现似乎有一个 与 SiCStus 一样的 Java 接口 这比使用 JNI 在 Java 进程中实例化实例更容易。我很早以前就使用过 C 语言,并且推荐它们。我更喜欢 SWI,因为它是开源的,根据我的经验 事实上的 执行。
SWI 的 Java 接口的文档似乎足够了,并且嵌入过程也非常简单。
两年前我也需要做同样的事情。我用了 SWI 接口,称为 JPL. 。它允许您加载 Prolog 文件、对其进行断言并对其进行查询。它确实需要安装 SWI Prolog,但这根本不是问题。SWI 序言是 适用于许多平台.
我还尝试过 100% 用 Java 实现并且不需要外部程序的替代方案。它们都存在缺陷或难以使用。不要浪费你的时间。
阿姆兹序言 已经存在了一段时间了。我曾短暂使用过它,但没有使用过嵌入式版本。但是他们确实有很好的文档并且可以购买支持。他们有 Java 端口,所以可能值得一看。
LPA 确实提供了 LPA Intelligence Server,作为将其 Prolog 引擎嵌入到各种主流语言(包括 Java、.Net 等)中的一种方式
克莱夫
两个用 Java 编写的商业 Prolog:Minerva 由 IF Computer Japan 和 Jekejeke 开发。两者都非常接近 ISO。
您还可以看看 Prol引擎 我创造的。它允许你将 Prolog 嵌入到你的 Java 程序中(但它不是很快)
普罗瓦3.0 http://www.prova.ws 即将完成。然而,它不仅仅是另一个 Prolog,而是多种编程风格的混合体,尤其对于简单的双向 Java 集成、反应式代理编程、与 ESB 集成、工作流逻辑和事件处理非常有用。此版本是从零开始的完全重写,因此缺少一些较旧的功能(例如 OWL 集成),但一定会在下一个版本中返回。
有 Scala 的迷你 Kanren, ,它为您提供了一种精简的、可修改的、基于现代 Horn 子句的逻辑编程语言的本机 JVM 实现。
我最近遇到的另一个有价值的选择是 JSetL。这不是序言,而是Java的约束编程库,并支持逻辑变量,统一,约束解决和非确定性。
Java 中有多种 Prolog 实现。它们不是非常快,但是在 Java 中使用起来很方便。例子有: 图Prolog 或者普罗格咖啡馆您还可以查看以下主题的学士论文Java Prolog程序的执行与分析.