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

Prolog: How to adjust the maximum length of lists shown in a trace?

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

我正在为我的大学课程做一个任务,虽然我不需要任何帮助来解决实际问题(我觉得那是 "cheating" 本来的样子)我想帮助找到一个方法在跟踪时扩展 prolog 中显示的列表的长度。例如,在任务中,您必须通过迷宫创建路径查找器,节点之间有彩色 "edges",每个节点都分配了字母表中的唯一字母。边是 "two way" 并且有一个 "start" 节点也通过红色边连接到 "m" 节点。目标是到达中间的 "g" 节点,同时以 [red,brown,yellow].

的重复顺序从开始沿着边缘移动

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

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 行跟踪以试图找到路径中的断开节点和 "correct" 节点,其中很多回溯混合在一起,即真的很难,而且真的很容易犯错误。此外,我使用的程序只保留 30 行左右(不知道这是否正常,但我使用的是来自官方网站的 SWI-Prolog(多线程,版本 7.2.3))。这意味着我必须在它第一次到达 j 节点时经历所有事情,这将花费大量时间。

所以正如我所说,这可以通过将列表(或任何名称)统一为 "return"(或任何名称)来解决,但我不想要这样的答案那把勺子喂给我,我宁愿自己弄清楚。所以如果你知道如何这样做,请不要告诉我,只是仍然使用跟踪增加最大显示列表的方法谢谢。

感谢您的帮助,对于我要求人们跳过的障碍,我深表歉意。

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

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