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

时间:2016-04-30 19:41:04

标签: list prolog trace prolog-toplevel

在前两段之后立即切断,他们大多是华夫饼解释情况。

我正在为我的大学课程完成一项任务,而我却不想要任何帮助来解决实际问题(我觉得那是"作弊"因为它当我追踪时,我想帮助找到一种方法来扩展prolog中显示的列表长度。例如,在任务中,您必须通过带有彩色"边缘的迷宫制作路径查找器。在每个节点之间分配一个来自字母表的唯一字母。边缘是"双向"并且有一个"开始"通过红色边缘连接到" m"节点也。目标是达到" g"中间的节点,从头开始沿着[红色,棕色,黄色]的重复顺序沿着边缘。

无论如何,我认为我的算法在递归的底部找到了正确的路径,但是通过跟踪器可能需要数千个步骤(我在完成之前持续返回大约2分钟)。目前它没有"返回"生成的步骤列表(虽然我确定你们中的一些人能够告诉我如何这样做,但我宁愿你们没有,因为它很重要我学到了实际的prolog我自己觉得)所以我唯一一次看到路线步骤列表中的内容就在追踪中。 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行跟踪试图找到分解和"正确"路径中的节点,有很多回溯混合,即真的很难,而且很容易出错。此外,我使用程序只保留30行左右(不知道这是否正常,但我正在使用官方网站上的SWI-Prolog(多线程版本7.2.3))。这意味着我必须经过第一次到达j节点的所有事情,这需要花费大量的时间。

正如我所说的,这可以通过将列表统一(或称为任何名称)作为" return"来解决。 (或者不管它叫什么)但是我不想要一个像勺子一样的答案给我,而是宁愿自己弄清楚。因此,如果您知道如何操作,请不要告诉我,并且仍然可以通过跟踪来增加显示的最大列表谢谢。

我很感激帮助,对不起我要求人们跳过的箍。

1 个答案:

答案 0 :(得分:0)

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

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