跳至主内容
框架 无框架

IlcOr

public 'IlcGoal'(一).....(const 'IlcGoal'g1, const 'IlcGoal'g2, 'IlcAny'标签=0)
public 'IlcGoal'(一).....(const 'IlcGoal'g1, const 'IlcGoal'g2, const 'IlcGoal'g3, 'IlcAny'标签=0' )
public 'IlcGoal'(一).....(const 'IlcGoal'g1, const 'IlcGoal'g2, const 'IlcGoal'g3, const 'IlcGoal'g4, 'IlcAny'标签=0' )
public 'IlcGoal'(一).....(const 'IlcGoal'g1, const 'IlcGoal'g2, const 'IlcGoal'g3, const 'IlcGoal'g4, const 'IlcGoal'g5, 'IlcAny'标签=0' )
定义文件: ilcp/cpext.h
包含文件: <ilcp/cpextilcp/cpext.h
返回一个选择点目标。

目标可以定义为在其他目标之间的选择。 函数 "IlcOr将目标实现为子目标之间的选择(2 到 5 个子目标之间)。 执行该目标时,CP 优化器的状态(包括目标堆栈的状态)将被保存。 这项活动被称为设置选择点。 然后,所有子目标都被保存为选择点的未尝试子目标。 然后,从选择点的未尝试子目标集合中删除第一个未尝试子目标,并调用该子目标。 如果失败,CP 优化器的状态就会恢复,并调用下一个未尝试的子目标,依此类推,直到一个子目标成功或不再有未尝试的子目标为止。 在后一种情况下,选择点本身就失效了。 如果给出了可选参数 "label,选择点就会被标上该参数。 The apparent limitation to five subgoals can be overcome by several calls to IlcOr since it is associative.

如果目标为空(也就是说,如果其实现为空),它将被静默地转换成一个总是成功的目标。

示例

例如,以下目标有三个选项:

 ILCGOAL0(PrintOne) {
     IlcCPEngine cp = getCPEngine();
     cp.out() << "打印一个" << std::endl;
     return 'IlcOr(PrintX(cp,1), 'PrintX(cp,2), 'PrintX(cp,3));
 }

下面介绍如何定义一个包含八个子目标的选择点:

 IlcOr(IlcOr(g1, g2, g3, g4, g5),
             IlcOr(g6, g7, g8));

欲了解更多信息,请参阅CP 优化器中的"目标 "和CP 优化器中的 "选择点"概念。

另请参阅: