Prolog:如何调整跟踪中显示的列表的最大长度?

Posted

技术标签:

【中文标题】Prolog:如何调整跟踪中显示的列表的最大长度?【英文标题】:Prolog: How to adjust the maximum length of lists shown in a trace? 【发布时间】:2016-08-25 20:35:58 【问题描述】:

请随意跳过前两段,它们大多是在解释情况。

我正在为我的大学课程做一项任务,而我不希望任何帮助解决实际问题(我觉得那是“作弊”)我想帮助找到一种方法来延长长度跟踪时序言中显示的列表。例如,在任务中,您必须在迷宫中创建路径查找器,在节点之间使用彩色“边缘”,每个节点都分配有字母表中的唯一字母。边缘是“双向”的,并且有一个“开始”节点也通过红色边缘连接到“m”节点。目标是到达中间的“g”节点,同时以 [red,brown,yellow] 的重复顺序从一开始沿着边缘移动。

无论如何,我认为我的算法在递归的底部找到了一条正确的路线,但是通过跟踪器可能需要数千步(我在完成之前按住 return 大约 2 分钟)。目前它不会“返回”生成的步骤列表(虽然我相信你们中的一些人能够告诉我如何这样做,但我宁愿你不这样做,因为我学习实际的序言很重要我自己感觉)所以我唯一一次看到路线步骤列表中的内容是在跟踪中。 所以问题出在这里:

path(k, [red, brown, yellow], [[start, red], [m, brown], [e, yellow], [h, red], [r, brown], [p, yellow], [n|...], [...|...]|...], [start, m, e, h, r, p, n, j|...], g)

最终列表包含我想知道它是否有效的路线,但是:

[start, m, e, h, r, p, n, j|...]

在 j 处截断,我希望跟踪显示完整列表,否则我将不得不返回 100 行跟踪试图在路径中找到分解和“正确”的节点,其中混合了很多回溯在 ie 中真的很难,而且真的很容易出错。此外,我正在使用的程序只保留了 30 行左右(不知道这是否正常,但我使用的是来自官方网站的 SWI-Prolog(多线程,版本 7.2.3))。这意味着我必须在它第一次到达 j 节点时经历所有事情,这将花费大量时间。

正如我所说,这可以通过将列表统一(或任何名称)作为“返回”(或任何名称)来解决,但我不希望得到像喂给勺子那样的答案我宁愿自己解决。所以如果你知道怎么做,请不要告诉我,只是用trace增加最大显示列表的方法谢谢。

感谢您的帮助,对于我要求人们跳过的麻烦表示抱歉。

【问题讨论】:

哈哈,这里每隔几周就会出现一次。见,Help: I want the whole answer 谢谢。我想我可以让它在跟踪中起作用。 【参考方案1】:

为了防止这些类型的输出[_|...]添加下面的代码;

:- set_prolog_flag(toplevel_print_options,
    [quoted(true), portrayed(true), max_depth(0)]).

【讨论】:

以上是关于Prolog:如何调整跟踪中显示的列表的最大长度?的主要内容,如果未能解决你的问题,请参考以下文章

使用Prolog的CLPFD基于约束结果生成列表

如何调整oracle中的sql语句输入的最大长度

如何在 Prolog 中附加列表?

Xshell显示行数调整

在 Prolog 中使用约束和排列解决难题

如何通过Prolog将字符串连接到列表中的多个元素?