Prolog - 查询输出有限的答案

时间:2015-10-15 23:57:22

标签: prolog prolog-toplevel

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

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

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

说我的KB是:     边缘(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]。为了记录,我正在使用SICSTUS

2 个答案:

答案 0 :(得分: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)]).

(作为初学者,请尽可能避免使用兼容效果的内置插件 - 即使您只是"打印术语。这是您可以轻松避免的分心。)

答案 1 :(得分:1)

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