2016-04-30 12 views
0

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

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

В любом случае, я считаю, что мой алгоритм находит правильный путь в нижней части рекурсии, но через трассировку можно пройти тысячи шагов (я возвращал около двух минут до его завершения). В настоящее время он не «возвращает» сгенерированный список шагов (и, хотя я уверен, что некоторые из вас смогут рассказать мне, как это сделать, я бы предпочел, чтобы вы этого не сделали, потому что важно изучить фактический пролог я чувствую себя), поэтому единственный раз, когда я вижу, что находится в списке шагов маршрута, находится в следе. SO здесь проблема:

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, я хочу, чтобы след, чтобы показать ПОЛНЫЙ списки, в противном случае мне придется вернуться через 100 строк трассировки, пытаясь найти разбитые и «правильные» узлы в пути, при этом множество обратных ссылок смешивается, т. е. действительно сложно, и действительно легко ошибиться. Кроме того, я использую программу, которая содержит только 30 строк (не знаю, нормально ли это, но я использую SWI-Prolog (Multi-threaded, version 7.2.3) с официального сайта). Это означает, что мне пришлось бы пройти через все, что было в первый раз, когда он достигнет узла j, который займет огромное количество времени.

Как я уже сказал, это можно решить, если список будет унифицирован (или как он там называется) как «возврат» (или что бы он ни назывался), но я не хочу отвечать подобной ложкой для меня и предпочел бы разобраться в этом сам. Поэтому, если вы знаете, как это сделать, пожалуйста, воздержитесь от того, чтобы рассказывать мне и все еще, чтобы увеличить максимальный отображаемый список со следом.

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

+0

Ха-ха, это происходит каждые две недели здесь. См., [* Справка: я хочу весь ответ *) (http://www.swi-prolog.org/FAQ/AllOutput.html). – lurker

+1

Спасибо. Я думаю, что могу заставить это работать в трассировке. – Shefeto

ответ

0

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

:- set_prolog_flag(toplevel_print_options, 
    [quoted(true), portrayed(true), max_depth(0)]). 

 Смежные вопросы

  • Нет связанных вопросов^_^