(Этот вопрос касается search/6.)ECLIPSE CLP: Пауза между промежуточными результатами и при поиске/6 в IC библиотеки
мне было интересно, если есть способ -rather чем ручной tracing- для приостановки выполнения поиска/6 каждый раз, когда было найдено новое решение для одной переменной?
Я хотел бы выполнить это для дальнейшего изучения того, что происходит во время поиска в моделях с ограничениями.
Например, если вы пытаетесь решить классическую проблему sudoku, и вы написали набор ограничений и способ печати для своей платы, может быть полезно распечатать плату после установки ограничений, но перед поиском , чтобы оценить силу ваших ограничений. Однако, как только поиск вызван для решения судоку, у вас действительно нет обзора одиночных результатов, созданных под ними, если вы не выполните трассировку.
Было бы очень полезно, если что-то было возможно в подобных:
(это просто абстрактный пример)
% Let's imagine this is a (very poorly) constrained sudoku board
?- problem(Sudoku),constraint(Sudoku),print(Sudoku).
[[1,3,_,2,_,_,7,4,_],
[_,2,5,_,1,_,_,_,_],
[4,8,_,_,6,_,_,5,_],
[_,_,_,7,8,_,2,1,_],
[5,_,_,_,9,_,3,7,_],
[9,_,_,_,3,_,_,_,5],
[_,4,_,_,_,6,8,9,_],
[_,5,3,_,_,1,4,_,_],
[6,_,_,_,_,_,_,_,_]]
Теперь для поиска:
?- problem(Sudoku),constraint(Sudoku),search_pause(Sudoku,BT),print(Sudoku,BT).
[[1,3,6,2,_,_,7,4,_],
[_,2,5,_,1,_,_,_,_],
[4,8,_,_,6,_,_,5,_],
[_,_,_,7,8,_,2,1,_],
[5,_,_,_,9,_,3,7,_],
[9,_,_,_,3,_,_,_,5],
[_,4,_,_,_,6,8,9,_],
[_,5,3,_,_,1,4,_,_],
[6,_,_,_,_,_,_,_,_]]
Board[1,3] = 6
Backtracks = 1
more ;
Это прекрасно! Спасибо! – SND