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

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

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

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


person TamarG    schedule 22.11.2011    source источник


Ответы (5)


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

person philonous    schedule 04.01.2014
comment
Это не работает, если пролог возвращает только один ответ. - person Kevin Van Ryckegem; 28.12.2015
comment
Если запрос завершается успешно, вы можете просто написать: ?- solution(S) ; true., т. е. просто добавить ; true, чтобы ввести точку выбора. Затем вы также получаете возможность нажать w. - person mat; 30.04.2016
comment
вы просто набираете w в выводе - person themhz; 08.12.2020

Я нашел два способа.


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.
person Joe    schedule 29.04.2016

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

person solalg    schedule 17.02.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 представляет собой (пустой) список опций. Для получения дополнительной информации см. документацию.

person Topological Sort    schedule 17.02.2016

Если вы хотите, чтобы SWI-Prolog по умолчанию отображал весь список, вы можете добавить эту строку в свой инициализировать файл:

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

Вы можете легко изменить файл инициализации из графического интерфейса (Настройки => Пользовательский файл инициализации).

person Maayan Kestler    schedule 25.07.2020