我正在开发一个Java应用程序,它需要做一些复杂的逻辑规则推导作为其功能的一部分。我想在Prolog或其他一些逻辑/约束编程语言中编写我的逻辑演绎,而不是Java,因为我相信生成的代码会更简单,更易于维护。
我在Prolog上搜索了嵌入式Java实现,并找到了它们中的一些,每个都只有很少的文档。我的(适度)选择标准是:
我有什么选择?它们的优点和缺点是什么?
答案 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)
答案 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的约束编程库,支持逻辑变量, 统一,约束解决和非决定论。
答案 11 :(得分:2)
Java中有许多Prolog实现。它们不是非常快,但在Java中使用方便。 例如: TuProlog或 PrologCafe 您还可以查看以下关于该主题的学士论文 Execution and Analysis of Prolog Programs in Java
答案 12 :(得分:2)