【问题标题】:Prolog: How to adjust the maximum length of lists shown in a trace?Prolog:如何调整跟踪中显示的列表的最大长度?
【发布时间】: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增加最大显示列表的方法谢谢。

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

【问题讨论】:

标签: list prolog trace prolog-toplevel


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-06-23
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多