gpt4 book ai didi

教堂域 : differences between `low/high` and `first/last` methods

转载 作者:行者123 更新时间:2023-12-04 14:54:12 26 4
gpt4 key购买 nike

Chapel 域有两组方法

domain.low, domain.high


domain.first, domain.last

这些返回不同结果的各种情况是什么(即何时 domain.first != domain.lowdomain.last != domain.high

最佳答案

首先,请注意这些查询不仅支持域,还支持范围(一种更简单的类型,表示许多域及其域查询所基于的整数序列)。出于这个原因,为了简单起见,我的答案最初将侧重于范围,然后再返回密集的矩形域(使用每个维度的范围定义)。

作为背景,firstlast on a range 旨在指定在该范围内迭代时将获得的索引。相比之下,lowhigh指定定义范围的最小和最大索引。

  • 对于简单的范围,例如 1..10 , firstlow将相同,评估为 1 , 而 lasthigh都将评估为 10
  • 在 Chapel 中以相反的顺序遍历范围的方法是使用负步幅,例如 1..10 by -1 .对于此范围,lowhigh仍将是 110分别,但 first将是 10last将是 1因为范围代表整数 10, 9, 8, ..., 1。
  • Chapel 还支持非单位步幅,它们也会导致差异。例如范围 1..10 by 2 , lowhigh仍将是 110分别和 first仍将是 1但是 last将是 9因为这个范围只代表 1 到 10 之间的奇数值。

  • 以下程序与 1..10 by -2 一起演示了这些情况我将其作为练习留给读者(您也可以 try it online (TIO)):
    proc printBounds(r) {
    writeln("For range ", r, ":");
    writeln(" first = ", r.first);
    writeln(" last = ", r.last);
    writeln(" low = ", r.low);
    writeln(" high = ", r.high);
    writeln();
    }

    printBounds(1..10);
    printBounds(1..10 by -1);
    printBounds(1..10 by 2);
    printBounds(1..10 by -2);

    使用每个维度的范围定义密集矩形域。类似查询 low , high , first , 和 last在这样的域上返回一个值元组,每个维度一个,对应于对相应范围的查询结果。例如,这是根据上述范围 ( TIO ) 定义的 4D 域:
    const D = {1..10, 1..10 by -1, 1..10 by 2, 1..10 by -2};

    writeln("low = ", D.low);
    writeln("high = ", D.high);
    writeln("first = ", D.first);
    writeln("last = ", D.last);

    关于教堂域 : differences between `low/high` and `first/last` methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332007/

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