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:如何调整跟踪中显示的列表的最大长度?的主要内容,如果未能解决你的问题,请参考以下文章