Chapel中的空数组是否有文字?

时间:2017-04-03 18:15:47

标签: chapel

我正在尝试在Chapel中创建一个空数组。可以像这样制作一个元素的数组:

var a: [1..1] int = (1);

但是当我尝试

var b: [1..0] int = ();

我得到了

  

语法错误:靠近')'

Chapel中是否有空数组文字?我找不到一个例子。

修改

我试图获得一个空数组的原因是我想实现get this function for empty arrays:

proc sum_of_even_squares(a) {
  // Does this work for empty arrays? Probably not.
  return + reduce ([x in a] if x % 2 == 0 then x*x else 0);
}

assert(sum_of_even_squares([7]) == 0);
assert(sum_of_even_squares([7, 3]) == 0);
assert(sum_of_even_squares([7, 3, -8]) == 64);
assert(sum_of_even_squares([7, 3, -8, 4]) == 80);

但是我无法形成一个空的数组文字。

1 个答案:

答案 0 :(得分:4)

通常,在Chapel中,为了声明一个空的东西,你指定它的类型但没有初始化,例如

var i:int;

但是要声明一个用值初始化的整数,你可能会忽略这个类型:

var j = 2;

在这种情况下,只需省略初始化程序即可使用。

var b: [1..0] int;

相关地,(1)不是声明数组文字而是声明元组文字。语法[1]将声明一个数组文字。目前,编译器实现中不支持零长度元组。让零长度数组文字起作用可能更容易,但它现在似乎也无法工作(在1.15中)。

零长度数组文字如何知道元素的类型?出于这个原因,我认为它不会对你的具体情况有所帮助。