语义网中的 SWI-Prolog

2022-09-01 21:15:25

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

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

你是如何与Java这样的编程语言集成的?

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

你使用prolog库做什么(在语义网的上下文中)?

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

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

我从来不想要像Intellij IDEA这样的JavaIDE。毕竟我会怎么做,自动完成?我理解基于规则的语言的必要性。话又说回来,我讨论开发环境的原因是为了帮助我跟踪我的规则(调试),并且可能识别我的知识集中的异常。SWI-Prolog的图形跟踪器解决了第一个要求,但至少对我来说,它似乎是粗制滥造和有限的。但我不相信还有什么。

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

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

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


答案 1

免责声明:我没有在商业/生产环境中使用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的内容,请尝试其他方法。


答案 2

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

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

你是如何与Java这样的编程语言集成的?

我使用了JPL Java Prolog接口

你使用prolog库做什么(在语义网的上下文中)?

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

使用了什么开发环境?

Eclipse RCP

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

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


推荐