首先 - 这是课程作业,所以我不能发布代码。这更多是关于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
答案 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)
目标。这应该显示实际的,非截断的列表。