Iterace

Smyčky, které iterují na sekvenci hodnot, jsou vyjádřeny jako for smyčky v Q#. Smyčka for v Q# se nerozlomí na základě podmínky, ale místo toho odpovídá iteraci nebo tomu, co je často vyjádřeno jako foreach nebo iter v jiných jazycích. V současné době existují dva datové typy Q# , které podporují iteraci: pole a oblasti.

Výraz se skládá z klíčového slova for, za kterým následuje symbol nebo symbol řazené kolekce členů, klíčové slovo in, výraz pole nebo Range typu a blok příkazů.

Blok příkazů (tělo smyčky) se spouští opakovaně s jednou nebo více proměnnými smyčky vázanými na každou hodnotu v oblasti nebo matici. Pro definované proměnné smyčky platí stejná pravidla dekonstrukce jako pro jakékoli jiné přiřazení proměnných, jako jsou vazby v letpříkazech , mutable, setuse aborrow. Samotné proměnné smyčky jsou neměnně vázané, nelze je znovu přiřadit v těle smyčky a při ukončení smyčky se vymknou z rozsahu. Výraz, přes který smyčka iteruje, se před vstupem do smyčky vyhodnotí a během běhu smyčky se nezmění.

To je znázorněno v následujícím příkladu. Předpokládejme, že qubits je hodnota typu Qubit[]a pak

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

Omezení specifická pro cíl

Vzhledem k tomu, že neexistují žádné break nebo continue primitivy v Q#, je délka smyčky známá, jakmile je známa hodnota iterace. Smyčky se for proto dají spouštět na veškerém kvantovém hardwaru.