Partager via


Itérations

Les boucles qui itèrent sur une séquence de valeurs sont exprimées sous forme de boucles for dans Q#. Une boucle for dans Q# ne s’arrête pas en fonction d’une condition, mais correspond plutôt à une itération, ou ce qui est souvent exprimé en tant que foreach ou iter dans d’autres langues. Il existe actuellement deux types de données dans Q# qui prennent en charge l’itération : les tableaux et les plages.

L’expression se compose du mot clé for, suivi d’un symbole ou d’un tuple de symboles, du mot clé in, d’une expression de type tableau ou Range et d’un bloc d’instructions.

Le bloc d’instructions (le corps de la boucle) est exécuté à plusieurs reprises, avec une ou plusieurs variables de boucle liées à chaque valeur de la plage ou du tableau. Les mêmes règles de déconstruction s’appliquent aux variables de boucle définies que les autres affectations de variables, telles que les liaisons dans let, les mutable, les useet les instructions borrow. Les variables de boucle elles-mêmes sont immuablement liées, ne peuvent pas être réaffectées dans le corps de la boucle et sortir de portée lorsque la boucle se termine. L’expression sur laquelle la boucle itère est évaluée avant d’entrer dans la boucle et ne change pas pendant l’exécution de la boucle.

Ce scénario est illustré dans l’exemple suivant. Supposons qubits est une valeur de type Qubit[], puis

for qubit in qubits {
    H(qubit);
}

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

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

Restrictions spécifiques à la cible

Étant donné qu’il n’existe aucune break ou continue primitives dans Q#, la longueur de la boucle est connue dès que la valeur d’itération est connue. Par conséquent, for boucles peuvent être exécutées sur tout le matériel quantique.