0

首先 - 这是课程作业,所以我不能发布代码。这更多是关于 prolog 如何输出其答案,而不是“我的代码是否正确”?

我正在创建一个谓词,它返回一个图之间的所有简单路径,给定一个边列表。

例如,paths(a, X)将返回以 . 开头的所有可能路径a

假设我的知识库是:edge(a,b)。边缘(b,c)。边(c,d)。边(d,f)。

然后我应该得到X = [[a], [a,b], [a,b,c], [a,b,c,d], [a,b,c,d,f]]- 我做到了。问题是,如果输出更长,那么它不会显示所有可能的输出 - 输出显示如下:

Paths = [[b],[b,c],[b,c,d],[b,c,d,a],[b,c,d,e],[b,c,d,f],[b,c,d,f|...]] ? 

是的

有什么方法可以让我的解释器明确显示所有内容?最后一个列表不完整 - 它应该显示 [b,c,d,f,g]。作为记录,我正在使用 SICTUS

4

2 回答 2

2

您会看到由顶层打印的已缩写的答案。在 SICStus 中,顶层打印的精确方式由 Prolog 标志确定,该标志toplevel_print_options最初为:

| ?- current_prolog_flag(toplevel_print_options, Options).
Options = [quoted(true),numbervars(true),portrayed(true),max_depth(10)] ? ;
no

删除写作集的深度限制(例如在你的.sicstusrc)。

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

(作为初学者,尽量避免使用有副作用的内置插件——即使你“只”打印术语。这是你可以轻松避免的干扰。)

于 2015-10-16T09:32:58.250 回答
1

这只是当列表变长时prolog的打印习惯,它只打印一些前缀。尝试添加一个print(Paths)目标。这应该向您显示实际的、未截断的列表。

于 2015-10-16T00:44:55.187 回答