问题标签 [swi-prolog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
559 浏览

macos - 如何在 OSX Lion 上的 SWI-prolog 中安装开发工具(plld 等)

我试图让 SWI-prolog 和 C 互相交谈。我有一些在 C 中更快/更简单的动态编程问题,我希望能够从 prolog 中调用它们。

SWi 手册在http://www.swi-prolog.org/pldoc/doc_for?object=section%282,%279.2%27,swi%28%27/doc/Manual/foreignlink 提供了有关如何执行此操作的详细信息。 html%27%29%29,但它要求您使用 plld 链接/加载您的程序。

我在我的机器上安装了 X-Code,然后重新安装了 SWI,但我找不到 plld 程序。我尝试通过 mac-ports 安装 swi-prolog-devel,但它失败了。我认为它失败了,因为 .pkg 中的 SWI 已经安装,并且它们发生冲突。

有人知道如何 1. 安装 SWI 的开发人员工具吗?或 2. 从他们网站上的 pkg 中卸载 SWI 版本,以便我可以使用 MacPorts 重新安装它?

0 投票
1 回答
666 浏览

prolog - Prolog XPCE 对话框返回选择列表

我有另一个 Prolog 问题,我找不到如何解决它的线索。

这是我的代码

我需要两种循环选择来启动另一个功能。但是prolog无法打开打包操作。

如果对话框返回 Q=[first selection,second selection],问题就解决了。

希望您能够帮助我。我对此感到非常沮丧......

0 投票
1 回答
213 浏览

forms - SWI-Prolog CGI cgi_get_form(Arguments) web 隐藏表单

我在使用 SWI-Prolog 的 CGI 库传递输入 type="hidden" 表单时遇到问题。具体来说,我这样做:

<form id="frmCGIPrologIni" name="frmCGIPrologIni" method="post" action="http://localhost/cgi-bin/x.pl"> <p><input type="hidden" name="initial" value="ini" /> <input class="submit" type="submit" value="Start" /> </p></form>

当程序 x.pl 调用时,cgi_get_form(Arguments)Arguments 应该是 Name(Value) 术语的列表,即:[Name, Value],所以它应该是 [initial(ini)]。

但是当我使用它时它说:错误:=../2:参数没有充分实例化

我尝试使用 write(Arguments) 手动打印它,我得到的是:_L160,打印第一个元素是:_G472并且 write_canonical(Arguments) 返回:'.'(_,_)

我也尝试使用 method="get" 来检查它,它会正确打印 URI,http://localhost/cgi-bin/x.pl?initial=ini所以我猜这不是提交问题,而是使用 cgi_get_form(Arguments) 处理的问题。

第一次运行“http://localhost/cgi-bin/x.pl”时,我会这样做:

问题是第二次。这次调用同一个程序有参数所以它不打印消息,到这里一切都很好。然后通过 true 并继续。那是我尝试使用之前解释的结果编写(参数)的时候(_L160)。结果应该是表单传递的数据。

有什么想法吗?

0 投票
1 回答
175 浏览

macos - 在 OSX Lion 上使用 swipl-ld 编译时缺少符号“_main”

我正在尝试编译要从 Prolog 外部函数接口调用的 C 程序。我正在做一些动态编程,这在 Prolog 中并不完全有效。但是,当我尝试编译文件时,出现以下错误:

C 文件就是此处找到的示例。

有谁知道是否有办法解决这个问题?

0 投票
2 回答
1467 浏览

python - SWI-Prolog 语义 Web 库和 Python 接口

我想编写一个使用 Prolog 查询 RDF 三元组的 Python Web 应用程序。我发现pyswip用于将 Python 与 SWI-Prolog 连接起来,我目前正在研究 SWI-Prolog 的 RDF 功能。我想知道是否有人以前尝试过这个——如果有人尝试过:你的设置是什么样的?你如何让 pyswip 与 SWI-Prolog 语义网络库一起工作?或者是否有另一个 Python-Prolog 接口可以让这更容易?

编辑:

我实际上找到了一个非常好的解决方案。我之前使用 AllegroGraph 3.3 Python API 对 RDF 数据进行 Prolog 查询,但我认为他们对 Allegro Common Lisp 的 Prolog 扩展有点缺乏,因为它缺少诸如数字比较运算符之类的东西。从那以后,我尝试了 AllegroGraph 4.6,我发现他们的 Prolog 扩展中缺少的任何东西都可以通过以下事实来弥补:您可以使用lisp转义函子编写 Allegro Common Lisp 表达式来处理您需要做的任何事情由 Prolog 扩展提供。由于某种原因,当我使用 AllegroGraph 3.3 Python API 时没有定义这个函子,但显然 Allegro 的开发人员从那时起已经走了很长一段路。

我建议任何想要构建一个使用 Prolog 查询 RDF 数据的 Python Web 应用程序的人。它超级快速且超级强大。

0 投票
1 回答
1773 浏览

prolog - Prolog 从 atom 中删除字符空间以使用 term_to_atom

在我的程序的某个时刻,我有一个由以前也是原子的原子形成的原子,我想删除其中的字符空间,以便以后可以毫无问题地使用:

term_to_atom(Result, 'second2(second2),region(ºMediterranean Sea),months(no_value),third3(third3),recog(ºNew Type),distance(no_value)').

并获得这个

Result = (second2(second2), region(ºMediterraneanSea), months(no_value), third3(third3), recog(ºNewType), distance(no_value))

或者原版也可以

Result = (second2(second2), region(ºMediterranean Sea), months(no_value), third3(third3), recog(ºNew Type), distance(no_value))

因为如果我不删除那些字符空间,那么term_to_atom就会抱怨它。我该如何解决?

0 投票
3 回答
180 浏览

performance - 是否有库/技术来收集 Prolog 中最佳子句排序的统计信息?

我正在编写一个程序,我需要查看字符串是否与特定模式匹配。现在我已经在 Prolog 中实现了这个作为规则 matchPattern(S),有超过 20 种不同的定义。

我最终通过模式检查谓词将所有二进制字符串运行到​​一定长度。该程序相当慢(正如Prolog通常那样),并且由于有很多不同的定义,我理想地希望对它们进行排序,以便最匹配的那些在排序中最早,因此由Prolog首先匹配,避免回溯尽我所能。

我现在正在使用 SWI Prolog,但我可以访问 SICStus,所以我愿意使用它或我可以免费获得的任何 Prolog 解释器。

0 投票
4 回答
2289 浏览

file - Swi Prolog,卸载源文件

是否有内置谓词或一种简单的方法可以从 prolog 的知识数据库中删除已经查阅过的源文件?我浏览了参考手册并没有找到任何可以做到这一点的东西。

0 投票
1 回答
860 浏览

prolog - 如何设计和加载我的 Prolog 源文件,这样我就不必手动 use_module?

我有一个源文件 openpage.pl,我在其中调用 use_module/1 来“导入”SWI-Prolog 的 http_open/3:

它毫无怨言地加载。但是,尽我所能,我无法按照其中的规则运行它。

所以在我的下一个会话中,我在加载源文件之前调用 use_module/1 ,一切都很好:

如何设置和执行我的文件,以便在加载我自己的代码之前不需要这个手动加载模块的步骤?

0 投票
2 回答
56 浏览

prolog - 在 prolog/swiprolog 中启动一个单独的程序

我想用 prolog 代码打开 firefox 或其他浏览器。但我怎么能意识到它。

具体我需要像序言一样的评论

open_url_in_Browser X。

其中 X 是 url。