循环

节点图里没有「跳回上面」这种操作(控制流不允许成环),循环要靠原生的循环节点实现。有两种。

有限循环

有限循环退出循环循环体循环结束beginend当前值它只储存一个东西:当前循环值。进入循环时,当前循环值被设成循环起始值。循环终止值每次都会重新获取,不储存。所以终止值引脚连着的节点会被反复求值。用 <= 判断:循环包含上下界。等价于
for (int i = begin; i <= end; i++)
注意当上界是 i32::MAX 时,这个循环无法正常结束(i 递增会溢出回绕,永远满足条件)。

列表迭代循环

列表迭代循环退出循环循环体循环结束列表当前值只储存当前索引不储存元素,也不储存列表长度 —— 每次用到元素或长度时都重新求一遍,等价于
for (int i = 0; i < list.size(); i++) {
    auto &element = list[i];
    // body
}
所以循环体里每次都用 list[i] / list.size() 的值重新取,而不是一开始取一份存下来。它属于「有控制流的节点」,但出参的处理是个例外 —— 见「数据流与所有权」。