SWI-Prolog - показать длинный список

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

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

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

Ответы

Ответ 1

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

Ответ 2

Если пролог возвращает только один ответ, вы можете заставить его подождать, набрав "; true". после предиката. Затем, если вы нажмете "w", вы увидите весь список, как написано в документе: http://www.swi-prolog.org/FAQ/AllOutput.html

Ответ 3

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


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

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

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

Вариация:

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

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