SWI-Prolog - показать длинный список - PullRequest
20 голосов
/ 22 ноября 2011

Я использую SWI-Prolog и пытаюсь напечатать список, но если список содержит более 9 элементов - это выглядит так -

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

есть ли способ показатьвесь список?

Ответы [ 4 ]

23 голосов
/ 04 января 2014

Просмотрите: 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]», а полное решение появляется в следующей строке.

5 голосов
/ 30 апреля 2016

Я нашел два пути.


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.
2 голосов
/ 17 февраля 2016

Если пролог возвращает только один ответ, вы можете подождать, набрав «; true».после предиката.Затем, если вы нажмете «w», вы увидите весь список в виде документа:

1 голос
/ 17 февраля 2016
?- createListSomehow(List), print(List), nl.

сделает это достаточно аккуратно.Вот что я делаю.

Вариация:

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

Аргумент [] для print_term представляет собой (пустой) список параметров.Для получения дополнительной информации см. Документацию .

...