Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 语义Web中的SWI-Prolog_Java_Prolog_Semantic Web_Swi Prolog_Dcg - Fatal编程技术网

Java 语义Web中的SWI-Prolog

Java 语义Web中的SWI-Prolog,java,prolog,semantic-web,swi-prolog,dcg,Java,Prolog,Semantic Web,Swi Prolog,Dcg,我想听听在使用SWI Prolog语义库方面有实际编程经验的人的意见。 编辑:这个问题的原因是,在我与许多有prolog经验的人交谈时,他们中的大多数人似乎都在他们的学术项目中使用过prolog。我想知道是否有人在生产环境中广泛使用了它。由于实时可维护性,性能不同于完成项目以获得好成绩 您是如何与Java这样的编程语言集成的? 编辑:正如回答中提到的,REST服务或使用SWI Prolog的外部接口似乎是两个最好的选择 您使用prolog库的目的是什么(在语义web环境中)? 在这里可能不会得到

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

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

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

编辑:正如回答中提到的,REST服务或使用SWI Prolog的外部接口似乎是两个最好的选择

您使用prolog库的目的是什么(在语义web环境中)?

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

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

我从来都不想要像Intellij这样的IDE来支持java。毕竟,我会怎么做,自动完成?我理解基于规则的语言的必要性。再说一次,我讨论开发环境的原因是为了帮助我跟踪规则(调试),并可能识别知识集中的异常情况。SWI Prolog的图形跟踪器处理了第一个需求,但至少对我来说,它看起来是劣质和有限的。但我不相信还有别的

我非常喜欢使用SWI Prolog的想法,但如果这会影响生产率,我会避开它。

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


注:当我提到答案时,我指的是@littletable提供的答案。另外,对于那些对SWI Prolog for semantic web感兴趣的人来说,它看起来很有趣。

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

这就是说,我确实使用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,请尝试其他方法。

我也没有在生产环境中真正使用它,但我将它集成到基于Java/Eclipse的环境中,作为我论文工作的一部分,用于实际场景中。此外,本文的工作重点是测试生物脂肪酶中prolog集成的性能和可用性

我将简短地回答您在下面提出的问题,但对于任何感兴趣的人来说,大多数信息都可以在我的论文报告中找到,也可以在我的相关标签中找到。源代码可在中找到

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

我用了

您使用prolog库的目的是什么(在语义web环境中)?

我用它对一个RDF数据库做了一些模式匹配,这个数据库有大约60000个核磁共振谱,包含不同高度的峰。与其他语义Web工具如Pellet和Jena(基于Java)相比,我使用它来测试SWI Prolog在该操作中的性能。(顺便说一句,SWI Prolog的表现远远超过了这两款