Переменная не печатает все значение Пролог

Если я назначу что-то вродеprocess([[baby],[boy],[[is]dancing],[with],[[the][family]]],A), то это дает вывод как

A = [[baby],[boy],[[is]dancing],[with],[[..][..]]].

Я хочу, чтобы он показал все значения на терминале. Что-то вродеA = [[baby],[boy],[[is]dancing],[with],[[the][family]]].

2 ответа

Проблема в том, что верхний уровень усекает список, когда они отображаются. Вы можете настроить глубину максимальной вложенности с помощью флага пролога. toplevel_print_optionс опцией max_depth(0)со значением 0, чтобы показать все.

Вспомогательная процедура изменит флаг пролога, чтобы изменить только max_depth на 0, оставив остальные параметры без изменений:

set_toplevel_flags:-
  current_prolog_flag(toplevel_print_options, Opts),
  (select(max_depth(_), Opts, TOpts) -> NOpts=TOpts ; NOpts=Opts),
  set_prolog_flag(toplevel_print_options, [max_depth(0)|NOpts]).

Использовать current_prolog_flag/2 предикат с toplevel_print_options флаг. Что-то вроде этого:

?- current_prolog_flag(toplevel_print_options, X).

X = [quoted(true), portray(true), max_depth(10), spacing(next_argument)].

Вы можете изменить max_depth значение параметра, или же вы можете набрать w после получения сокращенного ответа, и пролог распечатает ответ полностью. Нажатие p восстановит исходный формат. Чтобы Prolog ждал ввода после печати ответа, вы можете добавить к запросу некоторую неопределенность, добавив ; true. к этому. Для получения дополнительной информации см. Здесь.

Другие вопросы по тегам