问题标签 [prolog-tabling]
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.
prolog - XSB Prolog 偏序表
我正在尝试 XSB 版本 3.3.5 手册中的一个示例(来自“部分订单答案包含”):
我得到
有什么想法有什么问题吗?
此外,没有错误
prolog - 删除 DCG 中的左递归 - Prolog
我在这个语法中的左递归有一个小问题。我正在尝试在 Prolog 中编写它,但我不知道如何删除左递归。
我写过类似的东西,但它根本不起作用。如何更改它以使该程序正常工作?
prolog - 制表如何提高效率?
我很好奇制表如何提高 Prolog 程序的效率。它是如何实施的?欢迎解释和参考。
prolog - 具有增量表的溯因逻辑编程的优化规划
我想使用溯因逻辑编程来找到最佳计划。详尽地搜索计划空间是不切实际的,但是在普通逻辑编程中,有一些排序启发法将用于将事实(基础谓词)表示为排序列表。当然,排序列表可以以谓词形式重新转换为带有排序谓词的事实(基础谓词)——鉴于可溯源词是谓词,我更喜欢采用这种形式。
在这种形式中,我想根据它们的(各自的)排序谓词搜索优先级的基础谓词,并在第一个解决方案处终止,因为可以证明任何其他解决方案都不是最优的。
我知道这至少需要表格逻辑编程。幸运的是,表格现在得到了广泛的支持。但是,它可能还需要增量表,因为在绑架期间断言和收回可溯源——这将其限制为 XSB、AFAIK。
如何告诉 Prolog 引擎使用排序谓词来搜索基本术语?
此外,是否需要增量表才能使其实用?
performance - BProlog 8.1 中的表格性能不均衡
我用b-prolog 8.1 版的表格功能做了一些实验,对 我观察到的性能感到非常惊讶。
这是我使用的代码。它计算将某个正整数减少到所需的Collatz步数:N
I
1
I0
要确定从到的所有整数所需的最大归约步骤数I
:
当我在没有和使用表格的情况下运行一些查询?- time(i0_i_maxSteps0_maxSteps(1,1000000,0,MaxSteps)).
时,我观察到以下运行时(以秒为单位):
- 不带表格:6.784
- 带表:2.323、19.78、3.089、3.084、3.081 _ _ _ _
通过添加:- table posInt_CollatzSteps/2.
查询,速度提高了 2 倍。尽管如此,我还是很困惑:
- 第二次运行比第一次慢 5 倍以上。显然大部分时间都花在了 GC 上。从第 3 次运行开始,制表变体再次变快。
- 热运行(第 3 次、第 4 次、...)明显慢于冷运行(第 1 次)。
我没想到会这样!将此与我在xsb版本 3.6.0 中观察到的运行时进行对比:
- 不带表格:14.287
- 带表:1.829、0.31、0.308、0.31、0.333 _ _ _ _
我能做些什么?是否有任何指令或标志可以帮助我使用 BProlog 获得更好的性能?我在 Linux 上使用 BProlog 版本 8.1 64 位版本。
prolog - 记忆(和缓存)在 Prolog 查询中找到的解决方案?
在StackExchange 上的这个问题中,我问过(并且已经解决)我一直在尝试创建的 Prolog 程序。但是,虽然它原则上有效,但它并不能满足我现实世界的需要。
在我开始学习另一种语言(Datalog)之前,我想尝试一下我已经完成的工作,并知道如何在 Prolog 中实现一种方法来记忆早期查询的结果,这样同一个查询只执行一次。因此,我正在寻找一种将成功查询的结果添加到 List 的方法,如果再次询问相同的查询,它不会重做计算,而是使用记住的结果。
我的主要问题是我找不到将成功查询的结果保存在“向上传递”的列表中的方法。
在
我如何实现第一次通话
计算结果,并进行第二次调用
使用较早发现的结果,该结果保持“全局”?
prolog - Prolog 数据库记录
我有这个阶乘谓词。
如何更改此谓词,以便每次发出查询时,将计算结果存储在数据库中?如果可用,新查询应使用存储的结果。
prolog - Prolog 查询重复
我已经看到了一些关于这个主题的问题,但是他们都没有真正正确地回答我的问题。我会写一个小例子,这里有一些事实:
我想创建一个规则,说明pete
喜欢任何踢足球或网球的人。
但很明显,当我在 Prolog 中查询它时,john
会出现两次john
同时踢足球和网球。我希望它只出现john
一次。我怎样才能修改我的代码来做到这一点?
在此先感谢 - 丹
prolog - Anytime strongly connected components via Prolog
Markus Triska has reported an algorithm to determine strongly connected components (SCC). Is there a solution which determines the SCC without making use of attributed variable and that can work anytime. So that some vertices can have infinitely many edges?
I am asking because I am wondering whether B-Prologs anytime tabling which they call eager can be replicated. B-Prolog determines clusters which is their name for SCC. But it has also a tabling mode where it returns tabled results eagerly.