Iteracji

Pętle iterujące sekwencję wartości są wyrażane jako pętle for w Q#. Pętla for w Q# nie przerywa się na podstawie warunku, ale zamiast tego odpowiada iteracji lub często wyraża się jako foreach lub iter w innych językach. Obecnie istnieją dwa typy danych w Q#, które obsługują iterację: tablice i zakresy.

Wyrażenie składa się ze słowa kluczowego for, a następnie krotki symbolu, słowa kluczowego in, wyrażenia tablicy lub typu Range oraz bloku instrukcji.

Blok instrukcji (treść pętli) jest uruchamiany wielokrotnie, z co najmniej jedną zmienną pętli powiązaną z każdą wartością w zakresie lub tablicy. Te same reguły dekonstrukcji dotyczą zdefiniowanych zmiennych pętli, co do innych przypisań zmiennych, takich jak powiązania w instrukcjach let, mutable, usei borrow. Same zmienne pętli są niezmiennie powiązane, nie można ich ponownie przypisać w treści pętli i wyjść z zakresu po zakończeniu pętli. Wyrażenie, na którym wykonuje iterację pętli, jest obliczane przed wejściem do pętli i nie zmienia się, gdy pętla jest uruchomiona.

Ten scenariusz przedstawiono w poniższym przykładzie. Załóżmy, że qubits jest wartością typu Qubit[], a następnie

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;
    }
}

Ograniczenia specyficzne dla elementu docelowego

Ponieważ w breaknie ma continue ani Q# elementów pierwotnych, długość pętli jest znana zaraz po tym, jak jest znana wartość iteracji. W związku z tym pętle for można uruchamiać na całym sprzęcie kwantowym.