Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog ECLiPSe CLP:在ic库中的search/6找到的子结果之间暂停_Prolog_Eclipse Clp - Fatal编程技术网

Prolog ECLiPSe CLP:在ic库中的search/6找到的子结果之间暂停

Prolog ECLiPSe CLP:在ic库中的search/6找到的子结果之间暂停,prolog,eclipse-clp,Prolog,Eclipse Clp,(这项质询涉及: 我想知道是否有一种方法——而不是手动跟踪——可以在每次找到单个变量的新解决方案时暂停执行search/6 我想完成这项工作,以进一步研究在约束模型中搜索时发生的情况 例如,如果您正在尝试解决经典数独问题,并且您已经为电路板编写了一组约束条件和打印方法,那么在设置约束条件后但在搜索之前打印电路板可能会很有用,以便评估约束条件的强度。然而,一旦调用搜索来解决数独问题,除非您进行跟踪,否则您不会真正了解下面构建的单个结果 如果能够在以下方面实现某些功能,这将非常有用: (这只是一个抽

(这项质询涉及:

我想知道是否有一种方法——而不是手动跟踪——可以在每次找到单个变量的新解决方案时暂停执行search/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 ;

使用现有可视化工具

看一看这张照片。通过向代码添加注释,并从TkECLiPSe的“工具”菜单启动可视化客户端,可以获得所需的矩阵显示类型

使用您自己的检测搜索例程

您可以将中的
indomain_xxx
选择方法替换为用户定义的方法,在该方法中,您可以在传播之前和/或之后打印信息

如果这还不够,您可以将整个内置的
search/6
替换为您自己的,这并不太难,请参见或我的答案

使用数据驱动设施进行跟踪

使用ECLiPSe的数据驱动控制工具,当变量发生某些事情时,您可以非常轻松地显示信息。在最简单的情况下,您可以对变量实例化执行以下操作:

?- suspend(printf("X was instantiated to %w%n",[X]), 1, X->inst),
   writeln(start), X=3, writeln(end).

start
X was instantiated to 3
end

基于这个想法,即使在黑盒搜索例程中发生,您也可以编写。有关详细信息,请参阅链接。

这太完美了!非常感谢。
?- suspend(printf("X was instantiated to %w%n",[X]), 1, X->inst),
   writeln(start), X=3, writeln(end).

start
X was instantiated to 3
end