【发布时间】:2020-03-26 10:25:19
【问题描述】:
我正在创建一个名为 BlockBelow 的集合,如以下代码所示(这是更大模型的一部分)。
这样做时,我将某些块设为空 - 数据可能会为某些块提供空集。但是我想做一个检查并填充空的 BlockBelow 集,如下所示
{blockType} BlockBelow[b1 in PitBlocksType] =
{b | b in PitBlocksType: b1.i == b.i -1 &&
(b1.k == b.k ) &&
(b1.j == b.j) };
execute{
for(var i in PitBlocksType){
if ( BlockBelow[i] == {} ) BlockBelow[i] = i;
writeln(i, BlockBelow[i]);
}
}
没有 if 行的代码在脚本日志中给出如下输出,其中可以看到需要填充的空集:
<"P74" 2 3 10> {<"P106" 3 3 10>}
<"P75" 2 3 11> {<"P107" 3 3 11>}
<"P76" 2 3 12> {}
<"P77" 2 4 2> {<"P108" 3 4 2>}
<"P78" 2 4 3> {<"P109" 3 4 3>}
<"P79" 2 4 4> {<"P110" 3 4 4>}
<"P80" 2 4 5> {<"P111" 3 4 5>}
<"P81" 2 4 6> {<"P112" 3 4 6>}
<"P82" 2 4 7> {<"P113" 3 4 7>}
<"P83" 2 4 8> {<"P114" 3 4 8>}
<"P84" 2 4 9> {<"P115" 3 4 9>}
<"P85" 2 4 10> {<"P116" 3 4 10>}
<"P86" 2 4 11> {<"P117" 3 4 11>}
<"P87" 3 2 2> {}
<"P88" 3 2 3> {}
<"P89" 3 2 4> {}
<"P90" 3 2 5> {}
<"P91" 3 2 6> {}
<"P92" 3 2 7> {}
if 语句出现错误。关于如何克服这个问题的任何建议 - 使用 if 或任何其他方法来实现用 i 填充空集的目标
----回答后编辑---------------
对不起,我忘了说 {blockType} 是一个元组
tuple blockType {
key string id;
int i;
int j;
int k;
};
我尝试了 card() 函数,但它不适用于元组
【问题讨论】:
-
提供准确的错误会很有帮助,正如 OPL 报告的那样。否则读者必须猜测......
-
感谢 Xavier 的建议。错误是:脚本解析器错误:缺少表达式。