SWI-Prolog - показать длинный список
Я использую SWI-Prolog и пытаюсь напечатать список, но если в списке более 9 элементов - это выглядит так -
[1, 15, 8, 22, 5, 19, 12, 25, 3|...]
Есть ли способ показать весь список?
4 ответа
Посмотрите на: 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]", а полное решение появляется в следующей строке.
Я нашел два пути.
1.
?- set_prolog_flag(answer_write_options,[max_depth(0)]).
true.
Затем выполните команду, которая печатает усеченный список.
( документация set_prolog_flag)
2.
?- atom_chars(goodbye_prolog, X) ; true.
Положил ; 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.
Если пролог возвращает только один ответ, вы можете подождать, набрав "; true". после предиката. Затем, если вы нажмете "w", вы увидите весь список, как написано в документе: http://www.swi-prolog.org/FAQ/AllOutput.html
?- createListSomehow(List), print(List), nl.
сделаем это достаточно аккуратно. Это то, чем я занимаюсь.
Вариация:
?- use_module(library(pprint)). %load a library to do pretty-printing
?- createListSomehow(List), print_term(List,[]), nl.
[]
аргумент print_term
это (пустой) список опций. Для получения дополнительной информации см. Документацию.
Если вы хотите, чтобы SWI-Prolog по умолчанию отображал весь список, вы можете добавить эту строку в свой файл инициализации:
:- set_prolog_flag(answer_write_options,[max_depth(0)]).
Вы можете легко изменить файл инициализации из графического интерфейса (Настройки => Пользовательский файл инициализации).