Вопрос

У меня есть предикат m(L,L) И я хочу, чтобы он вернул список, который он занимает. Код такой:

m([],[]).
m([H|T],[H|L]) :- m(T,L).

Когда я пытаюсь использовать его с этим примером:

m([1,2,3,4,5,6,7,8,9,10],L)

Я получаю это как ответ:

L = [1, 2, 3, 4, 5, 6, 7, 8, 9|...].

(Я заметил, что если я попробую с меньшим количеством элементов, все в порядке.) Почему это происходит, а список неверен?

Как я могу этого избежать?

Извините, если это действительно глупый вопрос, но я искал в Интернете, и я не мог найти никакой документации, которая может помочь мне понять ... спасибо!

Это было полезно?

Решение

Список закончен - вывод только усекается для целей визуализации. Если вы напишите предикат, который распечатает ваш список, вы увидите, что он завершен. Я предполагаю, что вы используете SWI Prolog, что означает, что вы можете проверить эта ссылка Для способов изменить настройки дисплея.

Другие советы

Оба Toplevel Requery/ответный цикл в качестве отладчика сокращает длинные сложные термины. Они делают это, чтобы избежать бесконечных страниц вывода. На самом деле они пишут, используя write_term/3 который принимает список вариантов в качестве аргумента. Список опций для ответов, напечатанных Prologovevel, находится в Prolog-flag toplevel_print_options, а в том, что отладчик-от Debugger_print_options. Первоначально оба имеют значение ниже:

?- current_prolog_flag(toplevel_print_options, X).

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

Чтобы изменить настройки по умолчанию: добавьте директиву set_prolog_flag/2 в свой файл личной инициализации Prolog (см. Плинилизация) изменить по умолчанию вышеупомянутые флаги пролога.

Просто пойти в settings -> user init file ... ->

И изменить max_depth (10)

 :- set_prolog_flag(toplevel_print_options,
             [quoted(true), portray(true), max_depth(100)]).

Есть и другие варианты, которые вы можете использовать в Плинилизация Файл, который уже прокомментирован.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top