0

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

我正在为我的大学课程做一项任务,而我不希望任何帮助解决实际问题(我觉得那是“作弊”)我想帮助找到一种方法来延长显示的列表的长度跟踪时在序言中。例如,在任务中,您必须在迷宫中创建路径查找器,在节点之间使用彩色“边缘”,每个节点都分配有字母表中的唯一字母。边缘是“双向”的,并且有一个“开始”节点也通过红色边缘连接到“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 行跟踪试图在路径中找到分解和“正确”的节点,其中混合了很多回溯,即真的很难,而且真的很容易出错。此外,我正在使用的程序只保留 30 行左右(不知道这是否正常,但我使用的是来自官方网站的 SWI-Prolog(多线程,版本 7.2.3))。这意味着我必须在它第一次到达 j 节点时经历所有事情,这将花费大量时间。

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

感谢您的帮助,对于我要求人们跳过的箍感到抱歉。

4

1 回答 1

0

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

:- set_prolog_flag(toplevel_print_options,
    [quoted(true), portrayed(true), max_depth(0)]).
于 2016-05-01T09:31:17.843 回答