Prolog - 查询输出有限的答案

Prolog - query outputs limited answers

首先 - 这是课程作业,所以我不会 post 编码。这更多是关于序言如何输出其答案而不是 "is my code right"?

我正在创建一个谓词,在给定边列表的情况下,return是图形之间的所有简单路径。

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

假设我的知识库是: 边(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|...]] ? 

y

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

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

您看到的是由已缩写的顶层打印的答案。在 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)]).

(作为初学者,尽量避免使用有副作用的内置函数 - 即使您 "only" 打印术语。这是您可以轻松避免的干扰。)