我想将大输入数组的初始化分割成更小的 块(仅为了可读性)。我试过这个:
array[1..3,1..2] of int: arr;
% This works:
% arr = array2d(1..3,1..2, [0,0,2,2,3,3]);
% But this not:
arr[1] = [0,0];
arr[2] = [2,2];
arr[3] = [3,3];
constraint true;
solve satisfy;
当我运行此代码时,出现语法错误:
arr[1] = [0,0];
^
Error: syntax error, unexpected =, expecting ':'
这是Minizinc
不支持还是我错过了其他内容?
(有一个相关的问题initialize-only-certain-elements-of-array-in-dzn-file,但没有回答我的具体问题。)
答案 0 :(得分:4)
MiniZinc目前不允许这样做有两个原因:
arr[1]
是对数组的无效访问。在编译器的开发分支上有数组切片,但它们被访问为arr[1,..]
。我提出的解决方案是以2d格式化2d阵列,这样可以提高可读性。 MiniZinc具有二维数组文字的特殊格式:
arr = [|
0,0|
2,2|
3,3|
|];