gpt4 book ai didi

multidimensional-array - Minizinc:用一维数组初始化二维数组的每一行

转载 作者:行者123 更新时间:2023-12-02 20:22:47 24 4
gpt4 key购买 nike

我想将一个大输入数组的初始化拆分成更小的 block (只是为了可读性)。我试过这个:

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 ,但没有回答我的具体问题。)

最佳答案

MiniZinc 目前不允许这样做有两个原因:

  1. 没有数组的赋值是一种特殊的初始化语法,只能用于标识符。此格式的左侧不允许数组访问。 (这样做的主要原因是编译器需要保证所有值都是已知的,当值在语句之间拆分时更难检查)
  2. 当前版本的 MiniZinc 不支持数组切片。这意味着 arr[1] 是对数组的无效访问。在编译器的开发分支上有数组切片,但它们作为 arr[1,..] 访问。

我提出的解决方案是以二维方式格式化二维数组,这应该会增加可读性。 MiniZinc 对二维数组文字有特殊的格式:

arr = [|
0,0|
2,2|
3,3|
|];

更新:现在 MiniZinc 完全支持数组切片。但是,赋值项仍然只允许使用标识符。

关于multidimensional-array - Minizinc:用一维数组初始化二维数组的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50906639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com