(この質問はsearch/6に関するものです。)
単一の変数の新しい解決策が見つかるたびに、手動でトレースするのではなく、search/6 の実行を一時停止する方法があるかどうか疑問に思っていましたか?
制約のあるモデルでの検索中に何が起こっているかをさらに調査するために、これを達成したいと考えています。
たとえば、古典的な数独問題を解こうとしていて、ボードに一連の制約と印刷メソッドを記述している場合、制約を設定した後、検索する前にボードを印刷すると便利です。制約の強さを評価します。ただし、数独を解決するために search が呼び出されると、トレースを実行しない限り、その下に構築されている単一の結果の概要を実際に把握することはできません。
次のようなことが可能であれば、非常に便利です。
(これは単なる抽象的な例です)
% 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 ;