你能拉上 Chapel 里的所有双鞋吗?

Can you zip all pairs in Chapel?

假设,稍等片刻,然后回到你的一天,我在 Chapel 中有两个字符串域,我想获得所有对的字符串域。

var dd: domain(string),  sd: domain(string);
dd += "Monday"; dd+="Tuesday"; dd+="Wednesday";
sd += "Rainy"; sd+= "Sunny";

var crossDomain = // 6 strings like "Monday-Rainy", "Monday-Sunny"

我可以嵌套 for 循环,但我想知道是否有更简洁的方法。

我认为嵌套的 for 或 for 循环是一个不错的选择:

for day in dd do
  for cond in sd do
    crossDomain += (day + "-" + cond);

另一种方法是编写一个迭代器以将循环从代码中分离出来:

for (day,cond) in allpairs(dd, sd) do
  crossDomain += (day + "-" + cond);

iter allpairs(d1, d2) {
  for i in d1 do
     for j in d2    do
      yield (i,j);
}

这需要的代码稍微多一些,但优点是如果您要在代码中多次执行此 all-pairs 模式,则可以多次 re-use 迭代器。请注意,如果您愿意,迭代器也可以直接生成连接的字符串。