Пролог: Как настроить максимальную длину списков, отображаемых на трассе?

Не стесняйтесь вырезать сразу мимо первых двух параграфов, они в основном вафельные, объясняющие ситуацию.

Я работаю над заданием для своего университетского курса, хотя мне не нужна помощь в решении реальной проблемы (я чувствую, что это "обман"), я хотел бы помочь найти способ увеличить длины списков, показанных в прологе при трассировке. Например, в задаче вы должны сделать поиск пути через лабиринт с цветными "ребрами" между узлами, каждому из которых назначается уникальная буква из алфавита. Ребра являются "двусторонними", и есть "начальный" узел, который также соединяется через красный край с узлом "m". Цель состоит в том, чтобы добраться до узла "g" в середине, проходя по краям от начала в повторяющемся порядке [красный, коричневый, желтый].

В любом случае, я думаю, что мой алгоритм находит правильный маршрут в нижней части рекурсии, но прохождение трассировщика возможно за тысячи шагов (я держал возврат в течение примерно 2 минут до его завершения). В настоящее время он не "возвращает" сгенерированный список шагов (и хотя я уверен, что некоторые из вас смогут рассказать мне, как это сделать, я бы предпочел, чтобы вы этого не делали, потому что важно, чтобы я выучил настоящий пролог я себя чувствую) поэтому единственный раз, когда я вижу, что в списке шагов маршрута находится в след. ТАК вот проблема:

path(k, [red, brown, yellow], [[start, red], [m, brown], [e, yellow], [h, red], [r, brown], [p, yellow], [n|...], [...|...]|...], [start, m, e, h, r, p, n, j|...], g)

Последний список содержит маршрут, который я хочу знать, если он действителен, однако:

[start, m, e, h, r, p, n, j|...]

Обрезается в точке j, я хочу, чтобы в трассировке отображались ПОЛНЫЕ списки, в противном случае мне придется вернуться через сотни строк трассировки, пытаясь найти разбитые и "правильные" узлы в пути, с большим количеством обратных отслеживаний, т.е. сложно и действительно легко ошибиться. Кроме того, я использую программу только сохраняет около 30 строк (не знаю, нормально ли это, но я использую SWI-Prolog(многопоточный, версия 7.2.3) с официального сайта). Это означает, что мне придется пройти через все, когда в первый раз он достигнет j-го узла, что займет огромное количество времени.

Поэтому, как я уже сказал, это можно решить, объединив список (или как он там называется) как "возвращение" (или как он там называется), но я не хочу, чтобы ответ, подобный той ложке, давался мне и скорее разберись сам. Так что, если вы знаете, как это сделать, пожалуйста, воздержитесь от рассказа и просто попробуйте увеличить максимальный отображаемый список с отслеживанием спасибо.

Я ценю помощь, извините за обручи, которые я прошу, чтобы люди прыгали.

1 ответ

Решение

Чтобы предотвратить эти виды выходов [_|...] добавив код ниже;

:- set_prolog_flag(toplevel_print_options,
    [quoted(true), portrayed(true), max_depth(0)]).
Другие вопросы по тегам