24

我想听听那些在使用 SWI-Prolog 的语义库方面有实际编程经验的人的意见。

编辑:这个问题的原因是,在与我交谈过的许多有 prolog 经验的人中,他们中的大多数人似乎在他们的学术项目中将它用于一些 AI 编程。我想知道是否有人在生产环境中广泛使用它。因为实时可维护性,性能不同于完成项目以获得好成绩。

您是如何与 Java 等编程语言集成的?

编辑:如答案中所述,似乎 REST 服务或使用 SWI-Prolog 的外部接口是两个最佳选择。

您将 prolog 库用于什么(在语义网络的上下文中)?

可能不会在这里得到明确的答案。可能,这个问题属于语义溢出。我现在有一个合理的想法,并将在更合适的论坛上继续讨论。

使用的是什么开发环境? SWI-Prolog 提供的 Emacs 或其变体似乎是压倒性的答案。

我从不想要一个像 Intellij IDEA for java 这样的 IDE。毕竟我会怎么做,自动完成?我理解基于规则的语言的必要性。再说一次,我讨论开发环境的原因是为了帮助我跟踪我的规则(调试),也可能识别我知识集中的异常。SWI-Prolog 的图形跟踪器满足了第一个要求,但至少在我看来,它显得粗制滥造和有限。但我不相信还有别的。

我真的很喜欢使用 SWI-Prolog 的想法,但如果它影响生产力,我会避开它。

正如答案中提到的,应该使用 Prolog 来执行它擅长的事情。我一直都知道这一点,因此我对与其他编程语言的集成提出了疑问。似乎最大的生产力猪是开发人员的质量,并且处于开发阶段。系统中的问题可能处于休眠状态且不易修复,但可以通过使用一组问题来检查系统的有效性来处理。

注意:当我提到答案时,我指的是@littletable 提供的答案。同样对于对语义网 SWI-Prolog 感兴趣的人来说,thea看起来很有趣。

4

2 回答 2

14

免责声明:我没有在商业/生产环境中使用 SWI-Prolog,我没有尝试过 SWI/Java 接口(尽管 SWI-Prolog 邮件列表中报告说它工作得相当好),我对语义网。

也就是说,我确实使用 SWI-Prolog 编写了一个大型且非平凡的项目,它不是一个玩具应用程序——我需要它来工作以完成我的研究。因此,即使不是所有必需的,我也有一些凭据可以回答这个问题。

在大型项目的上下文中,最好将 Prolog 视为用于编写搜索例程的领域特定语言 - 与 SQL 和存储不同。Prolog 做得非常好,那就是它解决了搜索问题。如果您的问题可以缩小到在给定一组事实和规则的情况下找到对一组变量的有效分配,那么 Prolog 是您的首选武器:除了调整之外,您不必担心编码中的任何其他事情查询和规则。它的运行速度也会相当快,尤其是在您编译谓词时。Prolog 通常很慢,不是因为它本身就很慢,而是因为它在大搜索空间上运行搜索例程。

记住这一点,您可以以与集成 SQL 类似的方式将其与 Java 集成:Prolog 负责解决搜索问题。它存储永久数据和规则,并运行查询。Java 应用程序负责其他任何事情。

开发环境对 Prolog 来说有点软肋。你不会得到一个花哨的 IDE - 仅仅是因为很少有东西可以看中。Prolog 程序很少有完整的编译时信息,所以你不会得到完美的自动完成。我只是使用 Emacs,Prolog shell 总是打开的。对于大多数事情,Prolog 文本跟踪器/调试器可以解决问题。SWI 自带图形调试器,但我没试过。

Prolog 有几个鲜为人知的优点:内置解析框架(DCG 规则)、出色的宏系统(术语扩展)和元谓词(call、findall 等)。如果您知道如何使用它们,那么这些就是您套牌中真正的王牌。

总结一下:Prolog 是提高还是损害生产力?这取决于当前阻碍您工作效率的因素。如果您浪费太多时间想知道如何在 Java 中实现知识表示和搜索例程 - 只需使用 Prolog;这并不是说您实现自己的红黑树而不是使用 SQL。如果您正在寻找软实时性能和破坏性的 IDE - 试试别的。

于 2011-02-08T11:55:48.147 回答
6

我也没有真正在生产环境中使用它,但我将它集成到基于 Java/Eclipse 的Bioclipse 工作台中,以便在实际场景中使用,作为我论文工作的一部分。此外,论文工作主要集中在测试 Bioclipse 中 prolog 集成的性能和可用性。

我将对您在下面提出的问题给出简短的回答,但是对于任何感兴趣的人,可以在我的论文报告中找到最多的信息,题为“SWI-Prolog 作为 Bioclipse 中语义查询的语义 Web 工具:集成和性能基准测试”,如以及在我相关标记的博客文章中。源代码可在github repo中找到。

您是如何与 Java 等编程语言集成的?

我使用了JPL Java Prolog 接口

您将 prolog 库用于什么(在语义网络的上下文中)?

我用它对一个包含 60000 个 NMR 光谱的 RDF 数据库进行了一些模式匹配,其中包含不同高度的峰。我用它来测试 SWI-Prolog 在此操作中的性能,与其他语义 Web 工具(例如 Pellet 和 Jena(基于 Java))进行比较。(顺便说一句,SWI-Prolog 的性能远远优于这两种工具)。

使用的是什么开发环境?

日食 RCP

我真的很喜欢使用 swi prolog 的想法,但如果它影响生产力,我会避开它。

我的经验是,除了提高某些问题的生产力之外,某些操作的性能也远远优于用传统编程语言编写的工具。

于 2011-02-16T10:05:01.327 回答