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" 打印术语。这是您可以轻松避免的干扰。)
首先 - 这是课程作业,所以我不会 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" 打印术语。这是您可以轻松避免的干扰。)