Я пытаюсь найти минимальную стоимость пути, сохраняя переменную Min
при отслеживании с возвратом. Приведенный ниже код не работает, однако он дает некоторое представление о том, что я хочу.
Min - это переменная, которая содержит текущее минимальное значение по сравнению с новым Total
, если Total
меньше, то NewMin
должно быть Total. Возможно, я отправлю NewMin
как Min
вперед. Однако, поскольку я полагаюсь на отслеживание с возвратом, предложение before принудительно не выполняется, и, следовательно, все сохраненные значения теряются.
calculate_cost(Start, [], CostList, Min, NewMin):-
sum_list(CostList, Total),
Total < Min,
NewMin is Total.
calculate_cost(Start, Rest, CostList, Min, NewMin):-
flatten(Rest, Places),
[Next|Left] = Places,
route(Start, Next, Cost),
calculate_cost(Next, Left, [Cost|CostList], Min, NewMin),
fail.
Теперь я хочу по существу сохранить переменную Min
до завершения программы, сделав при этом несколько сравнений.
Примечание. Предикат calculate_cost вызывается несколько раз (намного больше 1 миллиона), поэтому списки неосуществимы, как я пытался, и это приводит к Out of global stack
исключению.
Опция Assert также была опробована, но она приводит к той же проблеме.
Единственный вариант - поиск по минимуму.