Using Prolog with Javascript - Pengines
Using Prolog with Javascript - Pengines
我正在制作一个使用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 并与之交互。在这里,您可以找到文档。希望这能帮助您解决问题。祝你好运!
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在Javascript中将JSon对象转换为数组
- Javascript生成的表单未提交
- 使用javascript将动态表从一个html页面打印到另一个html页
- Using Prolog with Javascript - Pengines