【发布时间】:2010-12-21 11:32:39
【问题描述】:
我正在开发一个 Java 应用程序,它需要执行一些复杂的逻辑规则推导作为其功能的一部分。我想用 Prolog 或其他一些逻辑/约束编程语言而不是 Java 来编写我的逻辑推导,因为我相信生成的代码会更简单且更易于维护。
我用谷歌搜索了 Prolog 上的嵌入式 Java 实现,发现其中有很多,每个都有很少的文档。我的(适度的)选择标准是:
- 应该可以嵌入到 Java 中(例如,可以与我的 java 包捆绑在一起,而不需要在外部程序上进行任何本机安装)
- 从 Java 中使用的简单接口(用于启动推理、检查结果和添加规则)
- 至少提供几个使用示例
- 不一定是 Prolog,但其他符合上述标准的逻辑/约束编程语言也可以满足我的需求。
我有哪些选择,它们的优缺点是什么?
【问题讨论】:
-
我从未使用过 Prolog-in-Java,但另一种选择是自己编写。我知道至少有 2 本 Lisp 书籍在不多的页面(关于 Lisp 和 PAIP)中做到了这一点,所以即使在 Java 中也不会那么那么难。
-
当然,您可以在几页代码中制作一种玩具逻辑编程语言,但我正在寻找更强大的东西。现在,你也可以在几页代码中做一个玩具 lisp,所以我想我只需要四页就可以了:-)
-
那些是你乱扔的一些加载词!我不确定是什么让小型 Prolog 实现成为“玩具”,或者它们以何种方式不够“强大”。 Norvig 的一课是“Prolog 在要点上与 Lisp 相似”;那么,一个小小的 Prolog-on-Lisp 就不是一个“玩具”,而是一个不同的编译器 UI。在 Java 中它不会那么有趣,但我不认为他在使用宏时做的那么。
-
1.没有图书馆。 2.没有语法。在使用 Lisp 时,您可以重用 Lisp 语法和 Lisp 库(“Prolog 在要点上类似于 Lisp”),而 Java 则不然。相反,您最终还必须实现解析器和库。此外,即使使用 Lisp 实现,由于不使用 Prolog 语法和库,您也无法使用任何外部可用的 Prolog 库。
-
当然,您可以声称您可以像使用匿名对象而不是闭包一样重用 Java 语法和库。但是任何有函数式编程经验的人都知道,语法的复杂性和冗长只会让这几乎只是一个痛苦的练习。
标签: java prolog embedded-language logic-programming constraint-programming