你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

迭代

迭代一系列值的循环在 Q# 中表示为 for 循环。 Q# 中的 for 循环不会根据条件中断,而是对应于迭代,或其他语言中通常表示为 foreachiter 的子句。 目前,Q# 中支持迭代的数据类型有两种:数组和范围。

表达式由 关键字 (keyword) for组成,后跟符号或符号元组、关键字 (keyword) in、数组或Range类型的表达式和语句块。

语句块(循环正文)将反复运行,一个或多个循环变量绑定到范围或数组中的每个值。 相同的析构规则适用于定义的循环变量和任何其他变量赋值,例如 letmutablesetuseborrow 语句中的绑定。 循环变量本身是不可变的,不能在循环正文内重新赋值,并且在循环终止时会超出范围。 用作循环迭代基础的表达式在进入循环之前求值,在运行循环时不会更改。

下面的示例说明了这一点。 假设 qubitsQubit[] 类型的值,

for qubit in qubits {
    H(qubit);
}

mutable results : (Int, Result)[] = [];
for index in 0 .. Length(qubits) - 1 {
    set results += [(index, M(qubits[index]))];
}

mutable accumulated = 0;
for (index, measured) in results {
    if measured == One {
        set accumulated += 1 <<< index;
    }
}

特定于目标的限制

由于 Q# 中没有 breakcontinue 基元,因此循环的长度在迭代值已知时即已知。 因此,for 循环可以在所有量子硬件上运行。