Переменная не печатает все значение Prolog

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

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

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


person Harshita Jhavar    schedule 16.06.2015    source источник
comment
См. все эти ответы.   -  person false    schedule 16.06.2015


Ответы (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]).
person gusbro    schedule 16.06.2015

Используйте предикат 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 после получения сокращенного ответа, и Prolog напечатает ответ полностью. Нажатие p восстановит исходный формат. Чтобы заставить Пролог ждать вашего ввода после вывода ответа, вы можете добавить к запросу некоторую недетерминированность, добавив к нему ; true.. Дополнительную информацию см. здесь.

person Eugene Sh.    schedule 16.06.2015