【问题标题】:Prolog web programmingProlog 网络编程
【发布时间】:2011-04-17 00:01:17
【问题描述】:

在工作中,有人讨论过使用 prolog 作为 web 应用程序规则引擎的后端。

这将如何与现有系统绑定?

是否有其他语言的可用 prolog 库允许调用 prolog 模块?

【问题讨论】:

  • 只是出于好奇:您的工作场所有多少人真正掌握了 Prolog 的基础?从商业角度来看,这似乎是一个有趣的选择。

标签: prolog rule-engine


【解决方案1】:

对于SWI-Prolog,您可以查看Thea2,它在Prolog 中支持SWRL,也可以通过JPL 附加到外部推理器,例如HermiT 用于OWL/SWRL 推理,或@987654326 @等

就个人而言,我过去曾多次使用JPL 来启用具有 SWI-Prolog 后端的 Web 应用程序,如果您打算使用可在JVM,例如 Java、Groovy 或 Scala。另一种选择是将 SWI-Prolog 挂接到 CC++ environment,我还没有为 web 应用程序尝试过。

如果您的 Web 应用程序正在使用另一种不在 JVM 或 C/C++ 中运行的开发语言,那么这可能不适合您,因为连接正在运行的应用程序似乎有点困难SWI-Prolog 环境到其他语言环境。然而,话虽如此,我们之前已经使用HTTP 成功实现了 SWI-Prolog 到任何东西的桥接,但如果需要性能,这并不理想。

【讨论】:

    【解决方案2】:

    swi-prolog 包含一个非常合理的 HTTP 服务器/网络框架。

    您可以通过 HTTP 与它通信。

    有解析XML/SGML和JSON的工具,还有ODBC

    【讨论】:

    【解决方案3】:

    我不确定你在寻找什么,但你可能想看看Yield Prolog ,它允许将 Prolog 代码嵌入到使用 Python、C# 或 Javascript 的程序中。不涉及 API。我自己(还)没有使用过这个,但它可能适合你想要做的事情。

    【讨论】:

    • 据我了解 Yield Prolog 是基于 JavaScript 的,你会在 Web 服务器上运行它吗?但是对于前端集成,我想这会很棒。
    • 随着 node.js 越来越流行专门使用 JavaScript 进行服务器端编程,这可能是在客户端或服务器端集成 Prolog 处理的有用工具。
    【解决方案4】:

    我认为 Web 嵌入的一个重要先决条件,尤其是在 服务器端,是 Prolog 系统的多线程功能。在 至少你可能需要这个,如果你想服务多个 并发用户。

    然后,您可以选择纯解决方案,其中页面位于 由 Prolog 自己生成和维护。或者也许对于混合解决方案, Prolog 系统仅用于某些业务逻辑和另一个 编程语言用于表示和/或存储。

    下面的 Wiki 比较表给出了 Prolog 系统的概述和 它们是否是多线程的和/或支持一些网络编程:

    Comparison of Prolog implementations,
    Operating system and Web-related features

    为了我自己解决这个问题,我设置了一个小教程 这显示了 Jekejeke 运行时在服务器端的使用 商业逻辑。 Jekejeke Runtime 相当灵活,你不能 只有多个线程,你也可以有多个 知识库。

    Jekejeke Runtime,
    Deployment Methods

    例如,Jekejeke 运行时当前用于生产 销售系统,通过一些自定义的读/写锁,它甚至允许远程 管理员无需重启即可热插拔知识库 网络上下文。不幸的是,目前还没有这方面的报告。

    再见

    【讨论】:

    • SWI-Prolog Web 框架是多线程的。我已经将它用于我每天处理 10^7 次左右请求的应用程序。
    • 是的,这也是我在帖子中提供的 Wiki 表链接中列出 SWI-Prolog 的原因。同一个 Wiki 比较表有一个“多线程”列以及与网络相关的列。
    【解决方案5】:

    一些语言使用桥接器并为其提供库,例如在 Python 中,PySWIP 用于单线程使用,因此它不能很好地与 Web 应用程序配合使用。我发现 Pengine 的用途要广泛得多。

    Pengines 在 SWI 中,它们是通过 HTTP 查询 Prolog 的一种方式。至少有一个 JavaScript、Java 和 Python 库可以与它们交互,但它只是一堆 HTTP 请求。使其易于分发、用作微服务或水平扩展。尽管正如 anniepoo 所见证的那样,SWI 服务器可以处理大量流量!

    在 JavaScript 的情况下,还有 Tau Prolog,它可以编译并在 JavaScript 中工作。

    将逻辑语言用作规则引擎很有意义。

    【讨论】:

      【解决方案6】:

      LPA Prolog 已广泛用于各种基于 Web 的商业应用程序,其中最引人注目的是 Business Integrity 的行业领先文档组装产品 DealBuilder

      LPA 为交付基于 Web 的应用程序提供了各种架构 - 其中一些位于 LPA 网站的 VisiRule 部分中 www.lpa.co.uk

      克莱夫

      【讨论】:

        猜你喜欢
        • 2011-08-12
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-23
        • 1970-01-01
        相关资源
        最近更新 更多