问题标签 [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.

0 投票
2 回答
271 浏览

prolog - XSB Prolog 偏序表

我正在尝试 XSB 版本 3.3.5 手册中的一个示例(来自“部分订单答案包含”):

我得到

有什么想法有什么问题吗?

此外,没有错误

0 投票
4 回答
2252 浏览

prolog - 删除 DCG 中的左递归 - Prolog

我在这个语法中的左递归有一个小问题。我正在尝试在 Prolog 中编写它,但我不知道如何删除左递归。

我写过类似的东西,但它根本不起作用。如何更改它以使该程序正常工作?

0 投票
0 回答
933 浏览

prolog - 制表如何提高效率?

我很好奇制表如何提高 Prolog 程序的效率。它是如何实施的?欢迎解释和参考。

0 投票
2 回答
209 浏览

prolog - 具有增量表的溯因逻辑编程的优化规划

我想使用溯因逻辑编程来找到最佳计划。详尽地搜索计划空间是不切实际的,但是在普通逻辑编程中,有一些排序启发法将用于将事实(基础谓词)表示为排序列表。当然,排序列表可以以谓词形式重新转换为带有排序谓词的事实(基础谓词)——鉴于可溯源词是谓词,我更喜欢采用这种形式。

在这种形式中,我想根据它们的(各自的)排序谓词搜索优先级的基础谓词,并在第一个解决方案处终止,因为可以证明任何其他解决方案都不是最优的。

我知道这至少需要表格逻辑编程。幸运的是,表格现在得到了广泛的支持。但是,它可能还需要增量表,因为在绑架期间断言和收回可溯源——这将其限制为 XSB、AFAIK。

如何告诉 Prolog 引擎使用排序谓词来搜索基本术语?

此外,是否需要增量表才能使其实用?

0 投票
1 回答
163 浏览

performance - BProlog 8.1 中的表格性能不均衡

8.1 版的表格功能做了一些实验,对 我观察到的性能感到非常惊讶。

这是我使用的代码。它计算将某个正整数减少到所需的Collat​​z步数:NI1

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 次)。

我没想到会这样!将此与我在版本 3.6.0 中观察到的运行时进行对比:

  • 不带表格:14.287
  • :1.829、0.31、0.308、0.31、0.333 _ _ _ _

我能做些什么?是否有任何指令或标志可以帮助我使用 BProlog 获得更好的性能?我在 Linux 上使用 BProlog 版本 8.1 64 位版本。

0 投票
1 回答
95 浏览

prolog - 有界表

最近,我开始在 Prolog 中玩转表格。我用做的一些实验可以在这个问题中找到。

随着表格越来越大,我意识到我需要找到一些表格选项/参数,以允许我限制专门用于表格的内存量。

到目前为止,我在的手册中没有找到任何合适的内容。

你能指出我一些有用的信息吗?

0 投票
2 回答
615 浏览

prolog - 记忆(和缓存)在 Prolog 查询中找到的解决方案?

在StackExchange 上的这个问题中,我问过(并且已经解决)我一直在尝试创建的 Prolog 程序。但是,虽然它原则上有效,但它并不能满足我现实世界的需要。

在我开始学习另一种语言(Datalog)之前,我想尝试一下我已经完成的工作,并知道如何在 Prolog 中实现一种方法来记忆早期查询的结果,这样同一个查询只执行一次。因此,我正在寻找一种将成功查询的结果添加到 List 的方法,如果再次询问相同的查询,它不会重做计算,而是使用记住的结果。

我的主要问题是我找不到将成功查询的结果保存在“向上传递”的列表中的方法。

我如何实现第一次通话

计算结果,并进行第二次调用

使用较早发现的结果,该结果保持“全局”?

0 投票
2 回答
260 浏览

prolog - Prolog 数据库记录

我有这个阶乘谓词。

如何更改此谓词,以便每次发出查询时,将计算结果存储在数据库中?如果可用,新查询应使用存储的结果。

0 投票
3 回答
576 浏览

prolog - Prolog 查询重复

我已经看到了一些关于这个主题的问题,但是他们都没有真正正确地回答我的问题。我会写一个小例子,这里有一些事实:

我想创建一个规则,说明pete喜欢任何踢足球或网球的人。

但很明显,当我在 Prolog 中查询它时,john会出现两次john同时踢足球和网球。我希望它只出现john一次。我怎样才能修改我的代码来做到这一点?

在此先感谢 - 丹

0 投票
1 回答
105 浏览

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.