Enums 连接2个枚举类型变量集

Enums 连接2个枚举类型变量集,enums,minizinc,Enums,Minizinc,我想得到一个包含所有a、b、c、d、e、f的新枚举类型sup3。Minizing中是否有任何方法可以做到这一点。简短的回答是否,目前不支持这一点。枚举类型连接的主要问题来自这样一个事实:我们不仅连接两个事物列表,而且组合类型。以你为例: enum sup; sup=['a','b','c']; enum sup2; sup2=['d','e','f']; enum sup3; sup3=sup++sup2; 当我现在在表达式中的某个地方写入E时,我不再知道它的类型是sup2还是sup3

我想得到一个包含所有a、b、c、d、e、f的新枚举类型sup3。Minizing中是否有任何方法可以做到这一点。

简短的回答是否,目前不支持这一点。枚举类型连接的主要问题来自这样一个事实:我们不仅连接两个事物列表,而且组合类型。以你为例:

enum sup;
sup=['a','b','c'];


enum sup2;
 sup2=['d','e','f'];

enum sup3;
sup3=sup++sup2;
当我现在在表达式中的某个地方写入
E
时,我不再知道它的类型是
sup2
还是
sup3
。正如您可能想象的那样,无法保证
E
在两个枚举类型中具有相同的值(对于解算器),因此这可能是一个大问题

为了给人们带来一线希望,MiniZinc团队一直在研究一种类似的方法来实现这一点(但尚未正式宣布)。你可以这样写,而不是你的语法:

enum sup = {A, B, C};
enum sup2 = {D, E, F};
enum sup3 = sup ++ sup2;

这背后的思想是
F(X)
现在为
Y
X
的用法提供了一个构造函数。这意味着如果我们只看到
A
,我们知道它是
X
类型,但是如果我们看到
F(A)
,那么它是
Y
类型。同样,这还不可能实现,但有望很快在该语言中实现。

最好有一个实际的例子来说明为什么需要这个新功能+1任何例子都是可能的,但请考虑一个调度问题的例子,我们使用任务枚举。然后,您可以将时间映射到任务,但是,您可能需要一个额外的值来标识计划中的空闲时间。如果枚举在模型的其他部分中的使用方式不同,则不希望将此值添加到原始枚举中,而是使用单独的明细表枚举。当枚举部分已知,而另一部分是模型的输入时,通常会出现这些情况。谢谢!因此,它不会增加表达能力,但可以更容易地编码某些约束,对吗?@PatrickTrentin主要的想法是,它允许用户在更多情况下使用枚举。它不会改变可以用minizing表示的模型,因为您可以使用整数,但它将允许更简洁的建模,并且在选择枚举值时可能会进行一些编译器级别的优化
enum X = {A, B, C};
enum Y = {D, E, F} ++ F(X);