28

我正在使用 SWI-Prolog 并且我正在尝试打印一个列表,但如果该列表有超过 9 个项目 - 它看起来像这样 -

[1, 15, 8, 22, 5, 19, 12, 25, 3|...] 

有没有办法显示整个列表?

4

5 回答 5

32

看看:http ://www.swi-prolog.org/FAQ/AllOutput.html

简单的解决方案是在给出答案后输入w,即:

?- n_queens_problem(10,X).
X = [1, 3, 6, 8, 10, 5, 9, 2, 4|...] [write]
X = [1, 3, 6, 8, 10, 5, 9, 2, 4, 7] 

按下“w”键后,“[write]”会显示在最后,完整的解决方案会出现在下一行。

于 2014-01-04T14:14:32.060 回答
14

我找到了两种方法。


1.

?- set_prolog_flag(answer_write_options,[max_depth(0)]).
true.

然后执行打印截断列表的命令。

set_prolog_flag 文档


2.

?- atom_chars(goodbye_prolog, X) ; true.

AllOutput 文档

放在; true.导致长列表的调用的末尾。然后按下w键盘上的键。结果是:

?- sudoku([_,_,2,3,_,_,_,_,_,_,_,_,3,4,_,_], Solution); true.
Solution = [4, 1, 2, 3, 2, 3, 4, 1, 1|...] [write]
Solution = [4, 1, 2, 3, 2, 3, 4, 1, 1, 2, 3, 4, 3, 4, 1, 2] ;
true.
于 2016-04-29T22:55:33.973 回答
4

如果 prolog 只返回一个答案,您可以通过键入“; true”让它等待。在谓词之后。然后,如果您按“w”,您将看到文档中所写的整个列表:http ://www.swi-prolog.org/FAQ/AllOutput.html

于 2016-02-17T02:05:59.847 回答
1
?- createListSomehow(List), print(List), nl.

会做得足够整齐。我就是做这个的。

变化:

?- use_module(library(pprint)). %load a library to do pretty-printing
?- createListSomehow(List), print_term(List,[]), nl.

to的[]参数print_term是一个(空的)选项列表。有关详细信息,请参阅文档

于 2016-02-17T20:43:34.907 回答
1

如果您希望 SWI-Prolog 默认显示整个列表,您可以将此行添加到您的init 文件中

:- set_prolog_flag(answer_write_options,[max_depth(0)]).

您可以从 GUI 轻松修改初始化文件(设置 => 用户初始化文件)。

于 2020-07-25T11:49:45.880 回答