【发布时间】:2011-04-17 00:01:17
【问题描述】:
在工作中,有人讨论过使用 prolog 作为 web 应用程序规则引擎的后端。
这将如何与现有系统绑定?
是否有其他语言的可用 prolog 库允许调用 prolog 模块?
【问题讨论】:
-
只是出于好奇:您的工作场所有多少人真正掌握了 Prolog 的基础?从商业角度来看,这似乎是一个有趣的选择。
标签: prolog rule-engine
在工作中,有人讨论过使用 prolog 作为 web 应用程序规则引擎的后端。
这将如何与现有系统绑定?
是否有其他语言的可用 prolog 库允许调用 prolog 模块?
【问题讨论】:
标签: prolog rule-engine
对于SWI-Prolog,您可以查看Thea2,它在Prolog 中支持SWRL,也可以通过JPL 附加到外部推理器,例如HermiT 用于OWL/SWRL 推理,或@987654326 @等
就个人而言,我过去曾多次使用JPL 来启用具有 SWI-Prolog 后端的 Web 应用程序,如果您打算使用可在JVM,例如 Java、Groovy 或 Scala。另一种选择是将 SWI-Prolog 挂接到 C 或 C++ environment,我还没有为 web 应用程序尝试过。
如果您的 Web 应用程序正在使用另一种不在 JVM 或 C/C++ 中运行的开发语言,那么这可能不适合您,因为连接正在运行的应用程序似乎有点困难SWI-Prolog 环境到其他语言环境。然而,话虽如此,我们之前已经使用HTTP 成功实现了 SWI-Prolog 到任何东西的桥接,但如果需要性能,这并不理想。
【讨论】:
swi-prolog 包含一个非常合理的 HTTP 服务器/网络框架。
您可以通过 HTTP 与它通信。
有解析XML/SGML和JSON的工具,还有ODBC
【讨论】:
我不确定你在寻找什么,但你可能想看看Yield Prolog ,它允许将 Prolog 代码嵌入到使用 Python、C# 或 Javascript 的程序中。不涉及 API。我自己(还)没有使用过这个,但它可能适合你想要做的事情。
【讨论】:
我认为 Web 嵌入的一个重要先决条件,尤其是在 服务器端,是 Prolog 系统的多线程功能。在 至少你可能需要这个,如果你想服务多个 并发用户。
然后,您可以选择纯解决方案,其中页面位于 由 Prolog 自己生成和维护。或者也许对于混合解决方案, Prolog 系统仅用于某些业务逻辑和另一个 编程语言用于表示和/或存储。
下面的 Wiki 比较表给出了 Prolog 系统的概述和 它们是否是多线程的和/或支持一些网络编程:
Comparison of Prolog implementations,
Operating system and Web-related features
为了我自己解决这个问题,我设置了一个小教程 这显示了 Jekejeke 运行时在服务器端的使用 商业逻辑。 Jekejeke Runtime 相当灵活,你不能 只有多个线程,你也可以有多个 知识库。
Jekejeke Runtime,
Deployment Methods
例如,Jekejeke 运行时当前用于生产 销售系统,通过一些自定义的读/写锁,它甚至允许远程 管理员无需重启即可热插拔知识库 网络上下文。不幸的是,目前还没有这方面的报告。
再见
【讨论】:
一些语言使用桥接器并为其提供库,例如在 Python 中,PySWIP 用于单线程使用,因此它不能很好地与 Web 应用程序配合使用。我发现 Pengine 的用途要广泛得多。
Pengines 在 SWI 中,它们是通过 HTTP 查询 Prolog 的一种方式。至少有一个 JavaScript、Java 和 Python 库可以与它们交互,但它只是一堆 HTTP 请求。使其易于分发、用作微服务或水平扩展。尽管正如 anniepoo 所见证的那样,SWI 服务器可以处理大量流量!
在 JavaScript 的情况下,还有 Tau Prolog,它可以编译并在 JavaScript 中工作。
将逻辑语言用作规则引擎很有意义。
【讨论】:
LPA Prolog 已广泛用于各种基于 Web 的商业应用程序,其中最引人注目的是 Business Integrity 的行业领先文档组装产品 DealBuilder
LPA 为交付基于 Web 的应用程序提供了各种架构 - 其中一些位于 LPA 网站的 VisiRule 部分中 www.lpa.co.uk
克莱夫
【讨论】: