Using Prolog with Javascript - Pengines

Using Prolog with Javascript - Pengines

本文关键字:Pengines Javascript with Prolog Using      更新时间:2023-09-26


我正在制作一个使用prolog的AI项目,但我希望它在网上发布。我发现了 pengines(http://pengines.swi-prolog.org/docs/documentation.html,http://www.swi-prolog.org/pldoc/doc_for?object=section(%27packages/pengines.html%27)),它应该是 Prolog 的 javascript 实现,但我似乎不明白如何使用它。

我尝试使用 pengines npm 包 (https://www.npmjs.com/package/pengines) 并使用默认的快速生成器应用程序运行 pengines 文档中的代码:

<html lang="en">
<head>
    <script src="/vendor/jquery/jquery-2.0.3.min.js"></script>
    <script src="/pengine/pengines.js"></script>
    <script type="text/x-prolog">
        main :-
            repeat,
            pengine_input(X),
            pengine_output(X),
            X == stop.
    </script>
    <script>
        var pengine = new Pengine({
            oncreate: handleCreate,
            onprompt: handlePrompt,
            onoutput: handleOutput
        });
        function handleCreate() {
            pengine.ask('main');
        }
        function handlePrompt() {
            pengine.input(prompt(this.data));
        }
        function handleOutput() {
            $('#out').html(this.data);
        }
    </script>
</head>
<body>
    <div id="out"></div>
</body>

但它只返回一个错误:

http://localhost:3000/pengine/create 无法加载资源:服务器响应状态为 404 (未找到)

如果有人能解释如何使用 pengine 或 javascript 中的其他 prolog 实现,我将不胜感激。

谢谢!

我知道

这篇文章很旧,但对于其他停下来的人来说:

我正在制作一个使用prolog的AI项目,但我希望它在网上发布。我发现了 pengines(http://pengines.swi-prolog.org/docs/documentation.html,http://www.swi-prolog.org/pldoc/doc_for?object=section(%27packages/pengines.html%27)),它应该是 Prolog 的 JavaScript 实现

并不是Prolog的真正实现,它只是一个用JavaScript编写的客户端,可以与托管pengine进程的Prolog服务器通信。JavaScript 客户端通过 HTTP 和称为 Prolog 传输协议 (PLTP) 的特定协议与 pengine-server 通信。

使用

JavaScript 客户端,您可以发送简单的查询,例如 pengine.ask("member(X, [1,2,3])") 等,前提是 pengine 服务器已将member/2谓词公开为可以从远程安全使用。但是,当您在代码片段中进行演示时,您也可以在<script type="text/x-prolog">中编写prolog代码,并让JavaScript-Client将该prolog源代码发送给服务器,服务器将其添加到其知识库中。

http://localhost:3000/pengine/create 加载资源失败: 服务器响应状态为 404(未找到)

在你的 JavaScript 客户端可以创建 Pengine 之前,必须在某个地方运行一个 pengine 服务器。在您的代码片段中,未提供 URL,因此客户端将默认为 host-url。您还可以在创建 pengine 时显式指定 URL。

下面是从源代码存储库示例中获取的简单 pengines-server 示例:

:- module(pengine_server,
          [ server/1                    % +Port
          ]).
:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- use_module(library(http/http_server_files)).
:- use_module(library(http/http_files)).
:- use_module(library(pengines)).
:- use_module(pengine_sandbox:library(pengines)).
:- http_handler(/, http_reply_from_files(web, []), [prefix]).
server(Port) :-
    http_server(http_dispatch, [port(Port)]).

它使引擎 API 沙箱化,如果您想使其他谓词可用,您可以例如添加:

:- use_module(pengine_sandbox:library(semweb/rdf_db)).
sandbox:safe_primitive(rdf_db:rdf(_,_,_)).

你可以看看SWI prolog关于pengines的手册页。它包括 3 个示例,说明如何从 JavaScript 创建 pengine 并与之交互。在这里,您可以找到文档。希望这能帮助您解决问题。祝你好运!