Podmíněné smyčky

Stejně jako většina klasických programovacích jazyků podporuje smyčky, Q# které se přerušují na základě podmínky: smyčky, pro které je počet iterací neznámý a může se mezi spuštěním lišit. Vzhledem k tomu, že sekvence instrukce je v době kompilace neznámá, kompilátor zpracovává tyto podmíněné smyčky určitým způsobem v kvantovém modulu runtime.

Důležité

Omezení kvantového hardwaru

Smyčky, které se přerušují na základě podmínky, je náročné zpracovat na kvantovém hardwaru, pokud podmínka závisí na výsledcích měření, protože délka sekvence instrukce, která se má spustit, není předem známa.

Navzdory jejich běžné přítomnosti v konkrétních třídách kvantových algoritmů aktuální hardware zatím neposkytuje nativní podporu pro tyto druhy konstruktorů toku řízení. Spouštění těchto typů smyček na kvantovém hardwaru může být potenciálně podporováno v budoucnu zavedením maximálního počtu iterací nebo až bude k dispozici další podpora hardwaru. Kvantové simulátory však budou spouštět všechny smyčky založené na měřeních.

Kompilovací smyčky

Pokud podmínka nezávisí na kvantových měřeních, před odesláním sekvence instrukce do kvantového procesoru se podmíněné smyčky zpracovávají kompilací za běhu. Zejména použití podmíněných smyček v rámci funkcí je neproblematické, protože kód v rámci funkcí může vždy běžet na konvenčním (nekvantových) hardwaru. Q#proto podporuje použití tradičních while smyček v rámci funkcí.

Výraz opakování

Při spouštění programů na kvantových simulátorech umožňuje vyjádřit tok řízení, Q# který závisí na výsledcích kvantových měření. Tato funkce umožňuje pravděpodobnostní implementace, které mohou výrazně snížit výpočetní náklady. Běžným příkladem je vzorec opakování do úspěchu , který opakuje výpočet, dokud není splněna určitá podmínka , která obvykle závisí na měření. Takové repeat smyčky jsou široce používány v konkrétních třídách kvantových algoritmů. Q# proto má vyhrazený jazykový konstruktor, který je vyjadřuje, přestože stále představují výzvu pro provádění na kvantovém hardwaru.

Výraz repeat má následující tvar.

repeat {
    // ...
}
until condition
fixup {
    // ...
}

nebo alternativně

repeat {
    // ...
}
until condition;

where condition je libovolný výraz typu Bool.

Smyčka repeat spustí blok příkazů před vyhodnocením podmínky. Pokud se podmínka vyhodnotí jako true, smyčka se ukončí. Pokud se podmínka vyhodnotí jako false, před zadáním další iterace smyčky se spustí další blok příkazů definovaných jako součást volitelného fixup bloku, pokud je k dispozici.

Smyčka while

Známější smyčkou pro klasické výpočty je smyčka while , která se skládá z klíčového slova while, výrazu typu Boola bloku příkazů. Pokud arr je například pole kladných celých čísel,

mutable (item, index) = (-1, 0);
while index < Length(arr) && item < 0 {
    set item = arr[index];
    set index += 1;
}

Blok příkazů se spustí, pokud se podmínka vyhodnotí jako true.