SWI-Prolog - 显示长列表

33

我正在使用 SWI-Prolog,想要打印一个列表,但是如果列表有超过9个项目——它看起来像这样——

[1, 15, 8, 22, 5, 19, 12, 25, 3|...] 
有没有一种方法可以显示整个列表?
5个回答

38

请看: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]”,并且完整的解决方案会在下一行显示。


12
如果Prolog只返回一个答案,那么这种方法就不起作用了。 - Kevin Van Ryckegem
7
如果查询结果是确定的,你可以简单地写成:?- solution(S) ; true.,即只需在查询结尾添加 ; true 来引入一个选择点。这样一来,你还有机会按下 w 键。 - mat
你只需在输出中键入w - themhz

16

我找到了两种方法。


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.

4
如果Prolog只返回一个答案,您可以在谓词后面输入“; true”来使其等待。然后,如果您按下“w”,您将看到整个列表,就像文档中所写的一样:http://www.swi-prolog.org/FAQ/AllOutput.html

2
?- createListSomehow(List), print(List), nl.

我会做好足够整洁的工作。这就是我的职责。

变化:

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

print_term 函数的 [] 参数是一个(空)选项列表。欲知详情,请参阅文档


1
如果您希望SWI-Prolog默认显示整个列表,您可以将以下行添加到init file中:
:- set_prolog_flag(answer_write_options,[max_depth(0)]).

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接