问题标签 [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.
c# - 集成 C# 和 Prolog
对于我正在从事的项目,我想使用WordNet对用户输入进行一些语言分类,并且我想使用数据库的 Prolog 版本。
我试过P#,它工作得相当好,但似乎无法处理 WordNet 数据库的庞大规模。它可以编译我想要使用的最小文件(218 kB),但是当我尝试编译两个较大的文件(分别为 2.3 和 7.3 MB)时,它在大约半小时的工作后失败并且 Windows 弹出“出了点问题。向 Microsoft 发送报告?” 对话。
我也尝试过Prolog.Net,但它似乎不太好用。
最后,我尝试了SWI-Prolog 的C# 绑定,但无法让它们正常工作。当我尝试运行示例代码时,它在这PLEngine.Initialise()
一步失败,声称它尝试加载的东西(我假设的 DLL)是无效的 Win32 应用程序(BadImageFormatException)。
有没有人对集成 C# 和 Prolog 的其他方法有任何建议,或者有一些建议来获得我已经尝试过的解决方案?操作系统为 Windows server 2008(64 位),SWI Prolog 版本为 5.7.11。
java - 在 jpl 中调用列表函数
我想知道是否有人设法使用了“列表”。JPL 中的命令来检查 Prolog 知识库的内容?JPL 要求您构建查询,并将根据您在查询中设置的变量返回解决方案。例如(Java):
我看不出这对于listing/0 或什至需要实例化输入的listing/1 是如何工作的。目前我正在玩形式的代码
它返回知识库中存在的函数:
答案:
但这还不够,因为没有返回任何目标。我想我需要的是一个函数(如果不能使用 JPL 调用列表函数),它作为变量返回谓词头以及必须满足的相关目标列表。不幸的是,我不熟悉列表功能的内部结构,所以我不确定如何去做。
提前致谢
prolog - 如何在 Prolog 中进行大小写转换?
我正在与WordNet交互,我想分类的一些术语(各种专有名称)在数据库中大写,但我得到的输入可能没有正确大写。我最初的想法是编写一个谓词来产生输入的各种可能的大小写,但我不知道如何去做。
有谁知道如何解决这个问题,甚至更好,一种更有效的方式来实现我想做的事情?
php - 如何在 PHP 中使用 Prolog?
我想将 Prolog 与 PHP 一起使用。可能吗?
data-structures - prolog中的哈希表
前几天我在 prolog 中解决了一个难题,并意识到如果我使用另一种编程语言,我会使用哈希表/字典,但据我所知,这在 prolog 中是不可能的。
所以我的第一个问题是,是否有任何 prolog 支持具有哈希表性能特征的类字典数据结构?
其次,我想到,由于大多数 prolog 使用哈希表来存储谓词,我可以编写一个包装谓词来断言和收回事实,创建一个字典接口,该接口将利用谓词的底层哈希表。但是我会得到哈希表的性能特征,还是接口会增加会降低性能的开销?
list - 到达序言中的列表末尾
我被问到这个问题:
定义一个谓词ordered/1,它检查整数列表是否正确地按升序排列。例如,目标
ordered([1,3,7,11])
应该成功,目标也应该成功,ordered([1,3,3,7])
而目标ordered([1,7,3,9])
应该失败。
到目前为止,我有这个:
但它在每个列表上都失败了。
我推断它失败的原因是因为它到达列表中的末尾编号,然后尝试将该编号与空列表进行比较。显然这会失败,因为您无法将整数与空列表进行比较。即使您可以并且它返回0
一个空列表,它仍然会返回 false,因为该数字将大于0
,而不是小于。
我找不到解决方案...有什么想法吗?谢谢,乔恩。
编辑
所以,一些稍微修改的代码:
这现在适用于ordered([1])
,但更大的列表仍然无法正确运行。
我应该ordered([N, M|Ns])
在定义中包含类似的内容吗?
prolog - Prolog 中递归谓词末尾的剪切
通常,我会编写一个与内存性能相关的递归谓词,类似于上面的代码片段。使用 cut 试图强制进行尾调用优化。我最近一直在浏览一个大型的 prolog 代码库,并发现了一些示例,其中剪切实际上是在递归调用之后而不是在它之前。据推测,这具有防止尾调用优化发生而不是协助它的效果。
我的问题是我可以在不影响程序含义的情况下将递归调用之后的剪切移动到它之前吗?这是假设谓词的每个子句在相同的相对位置都有一个切割。
现在我一直在考虑更多,我在想答案可能是“不一定”,但是在调用之前用 cut 重写了所有代码并发现测试套件仍然通过,我也在想知道编写这样的谓词是否还有其他深奥的原因。或者它只是糟糕的编码?
prolog - 在 Prolog 中计算子列表元素
如何计算 Prolog 中的嵌套列表元素?我定义了以下谓词,它将嵌套列表计为一个元素:
用法:
这行得通,但我也想计算嵌套元素,即
输出 = 6
math - Prolog =:= 运算符
Prolog 中有一些特殊的运算符,其中之一是is
,但是,最近我遇到了=:=
运算符,不知道它是如何工作的。
有人能解释一下这个运算符的作用吗?我在哪里可以找到这些特殊运算符的预定义列表以及它们的作用?
mysql - 使用 Prolog ODBC 接口
我只是在学习序言。我前面有一个任务。我必须使用 Prolog ODBC 接口将一些数据插入到 mysql 或 MSSQL 等数据库中。我知道有一些示例谓词(SWI-PROLOG),例如
我不知道如何准确地使用这些谓词并展示一个工作示例。谁能告诉我如何准确地使用这些将数据从 prolog 插入到 MySQL 或 MSSQL 等数据库中。谁能告诉我通过 ProLOG 实现相同目标的确切要求?
任何帮助或信息将不胜感激。
谢谢你。