| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |
目标可以定义为在其他目标之间的选择。 函数 "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 优化器中的 "选择点"概念。
另请参阅: